Complied with Cease and Desist

rebranded to Canvas Refined
This commit is contained in:
Guy Sandler 2026-05-25 18:00:33 -07:00
parent 4880c05755
commit 61ef8e163c
26 changed files with 382 additions and 492 deletions

View File

@ -4,7 +4,7 @@
## Overview
Actually Better Canvas ("the Extension") is committed to protecting your privacy. This Privacy Policy explains how we collect, use, and protect your information.
Canvas Refined ("the Extension") is committed to protecting your privacy. This Privacy Policy explains how we collect, use, and protect your information.
TLDR: we store some of your canvas info locally on your device and it stays fully local
@ -88,7 +88,7 @@ We may update this Privacy Policy to reflect changes in our practices. We will n
For privacy concerns or questions about this Extension, please contact:
- **Email:** sandlerguy5@gmail.com
- **GitHub Issues:** [GuySandler/ActuallyBetterCanvas](https://github.com/GuySandler/ActuallyBetterCanvas)
- **GitHub Issues:** [GuySandler/Actuallycanvasrefined](https://github.com/GuySandler/Actuallycanvasrefined)
## Compliance
@ -99,4 +99,4 @@ This Extension operates in compliance with:
---
By using Actually Better Canvas, you accept the terms of this Privacy Policy.
By using Canvas Refined, you accept the terms of this Privacy Policy.

View File

@ -1,17 +1,12 @@
![Better Canvas](/icon/NEWtitle.png)
![Canvas Refined](/icon/NEWtitle.png)
# Actually Better Canvas
# Canvas Refined
I don't like the direction bettercanvas (bettercampus) is heading so I forked it
I don't like the direction canvasrefined (bettercampus) is heading so I forked it
They tried to change license but forgot to rebase so this is based on the MIT licensed version and fully legal 🙃
There is a dev branch for active alpha if you really want
<!-- ### Supported on -->
<!-- ![Google Chrome](https://img.shields.io/badge/Google%20Chrome-4285F4?style=for-the-badge&logo=GoogleChrome&logoColor=white) -->
<!-- ![Firefox](https://img.shields.io/badge/Firefox-FF7139?style=for-the-badge&logo=Firefox-Browser&logoColor=white) -->
## Inquiries
@ -29,7 +24,7 @@ To contact me, please email sandlerguy5@gmail.com, or you can open an issue with
## Features
Better Canvas introduces improvements to the Canvas user interface:
The original introduces improvements to the Canvas user interface:
- Fully customizable dark mode (choose from premade options or manually edit dark mode)
- Automatic scheduling for dark mode
@ -50,7 +45,7 @@ Better Canvas introduces improvements to the Canvas user interface:
## Newly added features
Actually Better Canvas adds more with more to come!
Canvas Refined adds more with more to come!
- GPA presets
- backend stuff:
@ -101,12 +96,7 @@ Actually Better Canvas adds more with more to come!
To install, run, and build with this repository locally,
- Clone the repository locally with
```bash
git clone https://github.com/GuySandler/betterercanvas
```
- Clone the repository locally
- Visit `chrome://extensions` in your browser. (replace chrome with your version of chromium)
- Enable developer mode by toggling the switch in the upper right corner of the viewport.
- Click the "Load upacked" button in the header.
@ -114,20 +104,19 @@ To install, run, and build with this repository locally,
## Usage
To use Better Canvas, select your browser below to install the extension from a store.
<!-- To use Canvas Refined, select your browser below to install the extension from a store. -->
To use Canvas Refined, clone the repo or manually download from the releases page.
<!-- [Chrome](https://chrome.google.com/webstore/detail/better-canvas/cndibmoanboadcifjkjbdpjgfedanolh) -->
<!-- [Firefox](https://addons.mozilla.org/addon/better-canvas/) -->
More active beta is on the dev branch.
### How to use
- Once the extension is installed, navigate to your institution's Canvas homepage.
- To edit the available options, click on the "Extensions" button in the upper right corner of the viewport.
- When the menu opens, click on the Better Canvas extension.
- When the menu opens, click on the Canvas Refined extension.
- A menu will appear with configuration options for your Canvas homepage.
## Color Reference
<!-- ## Color Reference
| Color | Hex |
| ---------- | ---------------------------------------------------------------- |
@ -135,7 +124,7 @@ To use Better Canvas, select your browser below to install the extension from a
| Text | ![#ffffff](https://via.placeholder.com/10/ffffff?text=+) #ffffff |
| Accent 01 | ![#ff002e](https://via.placeholder.com/10/ff002e?text=+) #ff002e |
| Accent 02 | ![#ff5200](https://via.placeholder.com/10/ff5200?text=+) #ff5200 |
| Accent 03 | ![#ff47ad](https://via.placeholder.com/10/ff47ad?text=+) #ff47ad |
| Accent 03 | ![#ff47ad](https://via.placeholder.com/10/ff47ad?text=+) #ff47ad | -->
## Contributing
@ -232,7 +221,7 @@ To add a new feature, please follow these guidelines.
You can fork, modify, and use this code however you like with attributes.
![Better Canvas](/icon/icon-48.png)
![Canvas Refined](/icon/icon-48.png)
Copyright (c) 2024 ksucpea

View File

@ -1,6 +1,6 @@
{
"actually_better_canvas": {
"message": "Actually Better Canvas"
"Canvas Refined": {
"message": "Canvas Refined"
},
"updates": {
"message": "Updates"

Binary file not shown.

View File

@ -5,8 +5,8 @@
#grade-summary-content ~ .extension-calcgpa{font-size:1.2em;font-weight:700;}
.hypocalcform span{font-weight:700;min-width:50%;}
.ic-DashboardCard__header_hero {border:0!important}
.bettercanvas-completed{text-decoration:line-through;}
.bettercanvas-completed a{text-decoration:line-through;}
.canvasrefined-completed{text-decoration:line-through;}
.canvasrefined-completed a{text-decoration:line-through;}
.extension-embed-hidden {display: none!important}
.extension-linkpreview {background-color:#eee;border:none;border-radius:7px;padding:5px 15px;color:#6C757C;font-weight:bold;box-shadow: #9da5ab80 0px 2px 5px;margin: 5px 2px}
.extension-linkpreview:hover {background-color:#e6e6e6;}
@ -19,23 +19,23 @@
.extension-skeleton {height:36px;display:flex;align-items:center;margin-bottom:5px;}
.extension-skeleton-text {margin-left: 18px;background: #ededed;width: 160px;height: 16px;animation: blink .5s infinite;}
.extension-gpaOptions {display:flex;align-items:center;margin:21px 0;}
.bettercanvas-export-output {position: fixed;height:100vh;width:100vw;top:0;left:0;z-index:10000;background:#000000c7;display:flex;align-items:center;justify-content:center}
.bettercanvas-export-copy { font-size:12px;white-space: pre-wrap;max-height:80vh;overflow:auto;padding:8px}
.bettercanvas-export-output-inner {width: 50%;background:#000;color:#fff;}
.bettercanvas-card-container {padding-bottom: 4px;}
.bettercanvas-assignment-container {margin: 0;padding:0;color: var(--ic-brand-font-color-dark-lightened-30);display: flex;justify-content:space-between;font-size:14px;align-items: center;transition:.2s all;}
.bettercanvas-card-header-container {align-items: center;display: flex;justify-content: space-between;padding: 0 18px;color:var(--ic-brand-font-color-dark-lightened-30);font-size:16px;font-weight:700;margin: 0;}
.bettercanvas-card-header-container h3, .bettercanvas-card-header-container a{font-size: 16px;font-weight: bold;}
.bettercanvas-card-header {color: var(--ic-brand-font-color-dark-lightened-30);margin-block:0;}
.bettercanvas-card-grade {position: absolute;top: 15px;left: 15px;background: #161616;padding: 2px 9px;border-radius: 200px;color: var(--ic-brand-font-color-dark-lightened-30);background: #fff;transition:.2s opacity;}
.bettercanvas-card-grade.bettercanvas-hover-only {opacity: 0%;}
.ic-DashboardCard:hover .bettercanvas-card-grade.bettercanvas-hover-only {opacity: 100%}
.bettercanvas-assignment-container:hover {background: #eee;cursor: pointer;color: var(--ic-brand-font-color-dark-lightened-30);}
.bettercanvas-assignment-link {flex: 1;text-decoration:none;margin: 0;padding:8px 18px;word-break: break-word;color:var(--ic-brand-font-color-dark-lightened-30)}
.bettercanvas-assignment-dueat {padding: 4px 8px;margin-right: 10px;border-radius: 4px;}
.bettercanvas-assignment-dueat:hover {box-shadow: 0 1px 4px #000!important}
.bettercanvas-skeleton-text {background: #ededed;width: 160px;height: 16px;animation: blink .5s infinite;margin-left: 18px;margin-bottom: 12px;margin-top: 8px;}
.bettercanvas-gpa {
.canvasrefined-export-output {position: fixed;height:100vh;width:100vw;top:0;left:0;z-index:10000;background:#000000c7;display:flex;align-items:center;justify-content:center}
.canvasrefined-export-copy { font-size:12px;white-space: pre-wrap;max-height:80vh;overflow:auto;padding:8px}
.canvasrefined-export-output-inner {width: 50%;background:#000;color:#fff;}
.canvasrefined-card-container {padding-bottom: 4px;}
.canvasrefined-assignment-container {margin: 0;padding:0;color: var(--ic-brand-font-color-dark-lightened-30);display: flex;justify-content:space-between;font-size:14px;align-items: center;transition:.2s all;}
.canvasrefined-card-header-container {align-items: center;display: flex;justify-content: space-between;padding: 0 18px;color:var(--ic-brand-font-color-dark-lightened-30);font-size:16px;font-weight:700;margin: 0;}
.canvasrefined-card-header-container h3, .canvasrefined-card-header-container a{font-size: 16px;font-weight: bold;}
.canvasrefined-card-header {color: var(--ic-brand-font-color-dark-lightened-30);margin-block:0;}
.canvasrefined-card-grade {position: absolute;top: 15px;left: 15px;background: #161616;padding: 2px 9px;border-radius: 200px;color: var(--ic-brand-font-color-dark-lightened-30);background: #fff;transition:.2s opacity;}
.canvasrefined-card-grade.canvasrefined-hover-only {opacity: 0%;}
.ic-DashboardCard:hover .canvasrefined-card-grade.canvasrefined-hover-only {opacity: 100%}
.canvasrefined-assignment-container:hover {background: #eee;cursor: pointer;color: var(--ic-brand-font-color-dark-lightened-30);}
.canvasrefined-assignment-link {flex: 1;text-decoration:none;margin: 0;padding:8px 18px;word-break: break-word;color:var(--ic-brand-font-color-dark-lightened-30)}
.canvasrefined-assignment-dueat {padding: 4px 8px;margin-right: 10px;border-radius: 4px;}
.canvasrefined-assignment-dueat:hover {box-shadow: 0 1px 4px #000!important}
.canvasrefined-skeleton-text {background: #ededed;width: 160px;height: 16px;animation: blink .5s infinite;margin-left: 18px;margin-bottom: 12px;margin-top: 8px;}
.canvasrefined-gpa {
overflow: hidden;
display: none;
margin: 36px;
@ -45,10 +45,10 @@
padding: 18px;
box-shadow: 0 1px 5px #000!important;
}
.bettercanvas-add-assignment {max-height: 0; overflow:hidden;transition: .3s max-height;}
.bettercanvas-custom-open {max-height: 250px}
#better-todo-add-task-menu.bettercanvas-custom-open {max-height: 420px;}
.bettercanvas-custom-input {box-sizing: border-box!important; width: 100%!important; height: 32px!important}
.canvasrefined-add-assignment {max-height: 0; overflow:hidden;transition: .3s max-height;}
.canvasrefined-custom-open {max-height: 250px}
#better-todo-add-task-menu.canvasrefined-custom-open {max-height: 420px;}
.canvasrefined-custom-input {box-sizing: border-box!important; width: 100%!important; height: 32px!important}
#better-todo-new-task-date,
#better-todo-new-task-time {
flex: 1 1 0;
@ -61,108 +61,108 @@
filter: invert(1) brightness(2);
opacity: .95;
}
.bettercanvas-custom-btn {background: #f5f5f5; border: 1px solid #c7cdd1; border-radius:6px; padding: 2px 8px;}
.bettercanvas-viewmore-btn {display: block;margin:0 auto;margin-top: 8px;}
.bettercanvas-course-percent, .bettercanvas-course-credit {border: 1px solid #ccc; color: var(--ic-brand-font-color-dark)}
.canvasrefined-custom-btn {background: #f5f5f5; border: 1px solid #c7cdd1; border-radius:6px; padding: 2px 8px;}
.canvasrefined-viewmore-btn {display: block;margin:0 auto;margin-top: 8px;}
.canvasrefined-course-percent, .canvasrefined-course-credit {border: 1px solid #ccc; color: var(--ic-brand-font-color-dark)}
.bettercanvas-course-percent, .bettercanvas-course-weight, .bettercanvas-course-credit {
.canvasrefined-course-percent, .canvasrefined-course-weight, .canvasrefined-course-credit {
height: 22px; text-align: center;border-radius: 3px;width: 50px; font-size: 13px; padding: 0;
}
.bettercanvas-course-weight {
.canvasrefined-course-weight {
width: 120px;
}
.bettercanvas-gpa-letter-grade {
.canvasrefined-gpa-letter-grade {
width: 24px;
margin-left: 6px;
font-weight: bold;
font-size: 16px;
}
.bettercanvas-gpa-output {
.canvasrefined-gpa-output {
display: flex;
gap: 12px;
font-size: 16px;
}
.bettercanvas-course-weight {margin: 0; width: min-content}
.bettercanvas-course-weights, .bettercanvas-gpa-percent-container {margin: 0; margin-right: 10px}
.bettercanvas-course-percent-sign{margin-left: 4px;}
.bettercanvas-gpa-name {margin: 0;width: 120px;}
.canvasrefined-course-weight {margin: 0; width: min-content}
.canvasrefined-course-weights, .canvasrefined-gpa-percent-container {margin: 0; margin-right: 10px}
.canvasrefined-course-percent-sign{margin-left: 4px;}
.canvasrefined-gpa-name {margin: 0;width: 120px;}
.bettercanvas-gpa-course, #bettercanvas-cumulative-gpa {padding:6px;display:flex; align-items: center;border-bottom:1px solid #c7cdd1;border-bottom:none!important;}
#bettercanvas-cumulative-gpa { font-weight: 16px;}
#bettercanvas-cumulative-gpa .bettercanvas-gpa-name {font-weight: bold;}
.bettercanvas-gpa-open {text-align:center}
.bettercanvas-gpa-open:hover {cursor: pointer}
.bettercanvas-gpa-courses {min-width:600px;width:max-content;}
.bettercanvas-gpa-course-top, .bettercanvas-gpa-course-bottom {display: flex;}
.bettercanvas-gpa-header {font-weight:700;font-size:16px;margin-top:0;margin-bottom:6px;padding-bottom:6px;}
.bettercanvas-dashboard-notes {width: 100%; box-sizing: border-box; margin-top: 18px;border: 1px solid #c7cdd1;border-radius:3px;padding:8px 14px;resize:vertical}
.bettercanvas-todosidebar, #bettercanvas-todo-list, #bettercanvas-announcement-list {margin: 0}
.bettercanvas-todo-container {display: flex; margin-top: 14px;position: relative;transition: .2s all;}
.bettercanvas-removing {max-height: 0;margin-top: 0}
#bettercanvas-todo-list, #bettercanvas-announcement-list {font-size: 12px}
.bettercanvas-todo-container, .bettercanvas-todo-container:hover {color:#777}
.bettercanvas-todo-container p {margin: 0!important;}
.bettercanvas-todo-icon svg {height: 18px; width: 18px;margin:0}
.bettercanvas-todoitem-course {overflow: hidden; text-overflow: ellipsis;white-space: nowrap;}
.bettercanvas-todoitem-title {font-size: 14px;font-weight:bold;display:inline;margin-top:2px;}
.bettercanvas-todoitem-date {font-weight: bold}
.bettercanvas-todo-item-completed {text-decoration: line-through;}
.bettercanvas-todo-item {overflow: hidden;margin-left: 12px;}
.bettercanvas-todo-item {width:100%;margin-left: 12px;color: #777}
.bettercanvas-todo-item:hover {text-decoration: underline;cursor: pointer;color: #777;}
.bettercanvas-customurl-setup {font-size: 18px;max-width: 400px;position: fixed; top: 40px; left: 40px; z-index: 10000; padding: 24px; background: #fff; border-radius: 6px; border: 1px solid #c7cdd1;box-shadow: 0 2px 5px rgb(0 0 0 / 30%)}
.bettercanvas-customurl-setup p {margin: 0;}
.bettercanvas-customurl-confirm {width: 100%; box-sizing: border-box;margin-top:20px;padding: 12px;border:none;background: #161616;border-radius:6px;color: #f5f5f5;font-size: 16px;}
.bettercanvas-todo-complete-btn {padding: 0;height: 28px; width: 28px; border-radius: 3px; display: none; right: 0; top: 0; position:absolute;z-index: 100;background: #fff; border: none;}
.bettercanvas-todo-complete-btn:hover {background:#eaebec}
.bettercanvas-todo-container .bettercanvas-todo-complete-btn {display: none}
.bettercanvas-todo-container:hover .bettercanvas-todo-complete-btn {display: block}
#bettercanvas-announcement-list {margin-bottom:1.0625rem;}
.bettercanvas-todo-item-loader {margin-top: 18px;}
.bettercanvas-todo-item-loader .bettercanvas-skeleton-text {height:12px;margin-top: 8px;margin-bottom:0;margin-left:25px}
.bettercanvas-hover-preview {position: absolute;top: -6px;left: -400px;display: none; background: #fff; color: #000; max-height: 300%; width: 350px; padding:12px;border-radius:5px; overflow: hidden;box-shadow: 0 2px 5px rgba(0,0,0,.3)}
.bettercanvas-preview-text {text-overflow: ellipsis;}
.bettercanvas-preview-title {font-weight:bold;font-size:14px;}
.bettercanvas-hover-preview::after {content:'';position:absolute;width:100%;height: 18px;bottom:0;left:0;background:linear-gradient(0deg, #fff 50%, transparent)}
.bettercanvas-link-image {height: 21px; width: 21px;padding: 0px}
.bettercanvas-link-image:hover {filter: brightness(66%)}
.bettercanvas-gpa-header {font-size:16px;font-weight: bold;padding: 0;margin: 0;}
.bettercanvas-gpa-card {width: 262px; box-shadow: 0 2px 5px rgba(0,0,0,.3);border-radius:4px;margin: 36px 0 0 36px;display: inline-block;padding: 18px;box-sizing: border-box;vertical-align: top;}
.bettercanvas-gpa-card p {margin: 0;}
#cumulative-gpa .bettercanvas-gpa-name {font-weight:bold;}
#bettercanvas-gpa-unweighted, #bettercanvas-gpa-weighted, #bettercanvas-gpa-cumulative {font-size: 24px; font-weight: bold;margin-top: 10px}
.bettercanvas-gpa-edit-btn {background: #f5f5f5; border: 1px solid #c7cdd1; border-radius:6px; width: 100%; padding: 5px 0px; color: #000;margin-top: 10px}
.bettercanvas-due-soon {background: #db3754; padding: 1px 4px; color: #fff; border-radius: 4px;display:inline-block}
.bettercanvas-assignment-overdue { background: #db3754!important;color:#fff!important;}
.bettercanvas-gpa-course-header {display: flex;}
.bettercanvas-course-customgr {margin: 0 10px;}
.bettercanvas-course-customgr-label {margin-left: 5px;}
.bettercanvas-course-credits {margin-right: 20px;}
.bettercanvas-todo-label-btn {display:inline-block;margin:0px 2px 2px 0;background: #f5f5f5;border:1px solid #c7cdd1;padding: 2px;border-radius:4px;}
.bettercanvas-todo-label {background: var(--ic-link-color);color:#fff;padding:2px 4px;border-radius:3px;display:inline;height:100%;margin-right:5px;}
.bettercanvas-todo-action {border-radius: 5px;}
.bettercanvas-todo-actions {position: absolute; top: 0; right: 0; background: #fff;width:110px;font-weight:bold; color:#000;display:none;z-index:1000;border-radius:3px;border: 1px solid #c7cdd1;padding:10px}
.bettercanvas-todo-actions-btn { border:1px solid transparent; height: 20px;width: 20px;background: none;padding: 0;margin: 0;border-radius:3px;}
/*.bettercanvas-dots-icon {display: block!important;}
.bettercanvas-todo-actions-btn:hover {background: #f5f5f5; border:1px solid #c7cdd1;}*/
.bettercanvas-todo-action, .bettercanvas-todo-action-tag { padding: 4px; margin: -2px 0;display:flex;justify-content: space-between;align-items:center;}
.bettercanvas-todo-action:hover {background: #f5f5f5;cursor:pointer}
.bettercanvas-todo-input {width: 100%!important;box-sizing: border-box!important;border-radius: 5px!important;height: 24px!important;padding:4px!important;margin:0!important;font-size:12px!important}
.bettercanvas-todo-header:hover {cursor:pointer;text-decoration:underline}
.bettercanvas-todo-actions svg {height: 18px; width:18px;}
.bettercanvas-todo-item-header {max-height:80px;overflow:hidden;}
.bettercanvas-todo-svg {fill:#2d3b45!important}
#bettercanvas-update-msg {margin-top: 5px; display: flex; justify-content: space-between; font-size:15px;background: linear-gradient(115deg, rgb(255, 53, 88, .9), rgb(255, 131, 73, .9), rgb(255, 103, 187, .9)); color: #fff; border-radius:4px; padding: 20px;white-space: pre-line;}
#bettercanvas-update-msg p {margin: 0;color:#fff!important;}
#bettercanvas-update-close { background: #2f2f2f59; padding: 3px 6px; border-radius: 3px; height:100%; border:none; color: #fff!important;}
#bettercanvas-reminders {animation: .4s ease slide; margin:20px!important;position: fixed!important; bottom: 0!important;right: 0;z-index:10000000000!important;flex-direction: column!important; gap:10px!important;}
.bettercanvas-reminder-wrapper {overflow:hidden!important;position:relative!important;display: flex!important;justify-content:space-between!important;gap:10px!important;align-items:center!important;background: #fff!important;border-radius:12px!important;min-width:320px!important;max-width:320px!important;box-shadow: 0 2px 5px rgb(0 0 0 / 30%)!important;opacity: .94!important;}
.bettercanvas-reminder-container {display:flex!important;gap:10px!important;padding: 22px 16px!important;}
.bettercanvas-reminder-title { font-weight:bold!important;font-size: 16px!important;color: #000!important;margin:0!important;line-height:16px!important;}
.bettercanvas-reminder-due {font-size:12px!important;margin:0!important;margin-top:5px!important;line-height:12px!important;color:#676767!important;}
.bettercanvas-reminder-hide {color:#000!important;padding: 0px!important; font-size:14px!important;height:22px!important;min-width:22px!important;width:22px!important;margin: 10px!important;border-radius:6px!important;cursor:pointer;display:flex!important;align-self:stretch!important;align-items:center!important;justify-content:center!important;align-items:center!important;background: #e9e9e9!important;}
.bettercanvas-reminder-content {text-decoration:none!important;}
.canvasrefined-gpa-course, #canvasrefined-cumulative-gpa {padding:6px;display:flex; align-items: center;border-bottom:1px solid #c7cdd1;border-bottom:none!important;}
#canvasrefined-cumulative-gpa { font-weight: 16px;}
#canvasrefined-cumulative-gpa .canvasrefined-gpa-name {font-weight: bold;}
.canvasrefined-gpa-open {text-align:center}
.canvasrefined-gpa-open:hover {cursor: pointer}
.canvasrefined-gpa-courses {min-width:600px;width:max-content;}
.canvasrefined-gpa-course-top, .canvasrefined-gpa-course-bottom {display: flex;}
.canvasrefined-gpa-header {font-weight:700;font-size:16px;margin-top:0;margin-bottom:6px;padding-bottom:6px;}
.canvasrefined-dashboard-notes {width: 100%; box-sizing: border-box; margin-top: 18px;border: 1px solid #c7cdd1;border-radius:3px;padding:8px 14px;resize:vertical}
.canvasrefined-todosidebar, #canvasrefined-todo-list, #canvasrefined-announcement-list {margin: 0}
.canvasrefined-todo-container {display: flex; margin-top: 14px;position: relative;transition: .2s all;}
.canvasrefined-removing {max-height: 0;margin-top: 0}
#canvasrefined-todo-list, #canvasrefined-announcement-list {font-size: 12px}
.canvasrefined-todo-container, .canvasrefined-todo-container:hover {color:#777}
.canvasrefined-todo-container p {margin: 0!important;}
.canvasrefined-todo-icon svg {height: 18px; width: 18px;margin:0}
.canvasrefined-todoitem-course {overflow: hidden; text-overflow: ellipsis;white-space: nowrap;}
.canvasrefined-todoitem-title {font-size: 14px;font-weight:bold;display:inline;margin-top:2px;}
.canvasrefined-todoitem-date {font-weight: bold}
.canvasrefined-todo-item-completed {text-decoration: line-through;}
.canvasrefined-todo-item {overflow: hidden;margin-left: 12px;}
.canvasrefined-todo-item {width:100%;margin-left: 12px;color: #777}
.canvasrefined-todo-item:hover {text-decoration: underline;cursor: pointer;color: #777;}
.canvasrefined-customurl-setup {font-size: 18px;max-width: 400px;position: fixed; top: 40px; left: 40px; z-index: 10000; padding: 24px; background: #fff; border-radius: 6px; border: 1px solid #c7cdd1;box-shadow: 0 2px 5px rgb(0 0 0 / 30%)}
.canvasrefined-customurl-setup p {margin: 0;}
.canvasrefined-customurl-confirm {width: 100%; box-sizing: border-box;margin-top:20px;padding: 12px;border:none;background: #161616;border-radius:6px;color: #f5f5f5;font-size: 16px;}
.canvasrefined-todo-complete-btn {padding: 0;height: 28px; width: 28px; border-radius: 3px; display: none; right: 0; top: 0; position:absolute;z-index: 100;background: #fff; border: none;}
.canvasrefined-todo-complete-btn:hover {background:#eaebec}
.canvasrefined-todo-container .canvasrefined-todo-complete-btn {display: none}
.canvasrefined-todo-container:hover .canvasrefined-todo-complete-btn {display: block}
#canvasrefined-announcement-list {margin-bottom:1.0625rem;}
.canvasrefined-todo-item-loader {margin-top: 18px;}
.canvasrefined-todo-item-loader .canvasrefined-skeleton-text {height:12px;margin-top: 8px;margin-bottom:0;margin-left:25px}
.canvasrefined-hover-preview {position: absolute;top: -6px;left: -400px;display: none; background: #fff; color: #000; max-height: 300%; width: 350px; padding:12px;border-radius:5px; overflow: hidden;box-shadow: 0 2px 5px rgba(0,0,0,.3)}
.canvasrefined-preview-text {text-overflow: ellipsis;}
.canvasrefined-preview-title {font-weight:bold;font-size:14px;}
.canvasrefined-hover-preview::after {content:'';position:absolute;width:100%;height: 18px;bottom:0;left:0;background:linear-gradient(0deg, #fff 50%, transparent)}
.canvasrefined-link-image {height: 21px; width: 21px;padding: 0px}
.canvasrefined-link-image:hover {filter: brightness(66%)}
.canvasrefined-gpa-header {font-size:16px;font-weight: bold;padding: 0;margin: 0;}
.canvasrefined-gpa-card {width: 262px; box-shadow: 0 2px 5px rgba(0,0,0,.3);border-radius:4px;margin: 36px 0 0 36px;display: inline-block;padding: 18px;box-sizing: border-box;vertical-align: top;}
.canvasrefined-gpa-card p {margin: 0;}
#cumulative-gpa .canvasrefined-gpa-name {font-weight:bold;}
#canvasrefined-gpa-unweighted, #canvasrefined-gpa-weighted, #canvasrefined-gpa-cumulative {font-size: 24px; font-weight: bold;margin-top: 10px}
.canvasrefined-gpa-edit-btn {background: #f5f5f5; border: 1px solid #c7cdd1; border-radius:6px; width: 100%; padding: 5px 0px; color: #000;margin-top: 10px}
.canvasrefined-due-soon {background: #db3754; padding: 1px 4px; color: #fff; border-radius: 4px;display:inline-block}
.canvasrefined-assignment-overdue { background: #db3754!important;color:#fff!important;}
.canvasrefined-gpa-course-header {display: flex;}
.canvasrefined-course-customgr {margin: 0 10px;}
.canvasrefined-course-customgr-label {margin-left: 5px;}
.canvasrefined-course-credits {margin-right: 20px;}
.canvasrefined-todo-label-btn {display:inline-block;margin:0px 2px 2px 0;background: #f5f5f5;border:1px solid #c7cdd1;padding: 2px;border-radius:4px;}
.canvasrefined-todo-label {background: var(--ic-link-color);color:#fff;padding:2px 4px;border-radius:3px;display:inline;height:100%;margin-right:5px;}
.canvasrefined-todo-action {border-radius: 5px;}
.canvasrefined-todo-actions {position: absolute; top: 0; right: 0; background: #fff;width:110px;font-weight:bold; color:#000;display:none;z-index:1000;border-radius:3px;border: 1px solid #c7cdd1;padding:10px}
.canvasrefined-todo-actions-btn { border:1px solid transparent; height: 20px;width: 20px;background: none;padding: 0;margin: 0;border-radius:3px;}
/*.canvasrefined-dots-icon {display: block!important;}
.canvasrefined-todo-actions-btn:hover {background: #f5f5f5; border:1px solid #c7cdd1;}*/
.canvasrefined-todo-action, .canvasrefined-todo-action-tag { padding: 4px; margin: -2px 0;display:flex;justify-content: space-between;align-items:center;}
.canvasrefined-todo-action:hover {background: #f5f5f5;cursor:pointer}
.canvasrefined-todo-input {width: 100%!important;box-sizing: border-box!important;border-radius: 5px!important;height: 24px!important;padding:4px!important;margin:0!important;font-size:12px!important}
.canvasrefined-todo-header:hover {cursor:pointer;text-decoration:underline}
.canvasrefined-todo-actions svg {height: 18px; width:18px;}
.canvasrefined-todo-item-header {max-height:80px;overflow:hidden;}
.canvasrefined-todo-svg {fill:#2d3b45!important}
#canvasrefined-update-msg {margin-top: 5px; display: flex; justify-content: space-between; font-size:15px;background: linear-gradient(115deg, rgb(255, 53, 88, .9), rgb(255, 131, 73, .9), rgb(255, 103, 187, .9)); color: #fff; border-radius:4px; padding: 20px;white-space: pre-line;}
#canvasrefined-update-msg p {margin: 0;color:#fff!important;}
#canvasrefined-update-close { background: #2f2f2f59; padding: 3px 6px; border-radius: 3px; height:100%; border:none; color: #fff!important;}
#canvasrefined-reminders {animation: .4s ease slide; margin:20px!important;position: fixed!important; bottom: 0!important;right: 0;z-index:10000000000!important;flex-direction: column!important; gap:10px!important;}
.canvasrefined-reminder-wrapper {overflow:hidden!important;position:relative!important;display: flex!important;justify-content:space-between!important;gap:10px!important;align-items:center!important;background: #fff!important;border-radius:12px!important;min-width:320px!important;max-width:320px!important;box-shadow: 0 2px 5px rgb(0 0 0 / 30%)!important;opacity: .94!important;}
.canvasrefined-reminder-container {display:flex!important;gap:10px!important;padding: 22px 16px!important;}
.canvasrefined-reminder-title { font-weight:bold!important;font-size: 16px!important;color: #000!important;margin:0!important;line-height:16px!important;}
.canvasrefined-reminder-due {font-size:12px!important;margin:0!important;margin-top:5px!important;line-height:12px!important;color:#676767!important;}
.canvasrefined-reminder-hide {color:#000!important;padding: 0px!important; font-size:14px!important;height:22px!important;min-width:22px!important;width:22px!important;margin: 10px!important;border-radius:6px!important;cursor:pointer;display:flex!important;align-self:stretch!important;align-items:center!important;justify-content:center!important;align-items:center!important;background: #e9e9e9!important;}
.canvasrefined-reminder-content {text-decoration:none!important;}
@keyframes slide {
0% {
right: -320px;

View File

@ -9,7 +9,7 @@ const DARKMODE_CSS = `
#calendar-drag-and-drop-container .fc-month-view .fc-body,
#content-wrapper .user_content.not_design_tools h3,
#context-list-holder,
.bettercanvas-course-credit,
.canvasrefined-course-credit,
#kl_banner,
#kl_banner_left,
#kl_banner_right,
@ -42,7 +42,7 @@ const DARKMODE_CSS = `
.ac-result-container,
.agenda-wrapper,
.al-options,
.bettercanvas-assignment-container,
.canvasrefined-assignment-container,
.bjXfh_daKB,
.bjXfh_daKB span,
.bottom-reply-with-box,
@ -127,7 +127,7 @@ body,
code,
img.kl_image_round_white_border,
img.kl_image_white_border,
.bettercanvas-course-percent,
.canvasrefined-course-percent,
pre,
table.summary tbody th,
table.summary td,
@ -159,8 +159,8 @@ table.seas-homepage-table,
.ic-app-course-menu.with-left-side #left-side.XOwIb_eLeB:not([aria-selected]):not([aria-disabled]):hover,
.XOwIb_eLeB[aria-selected],
span.fOyUs_bGBk.fOyUs_desw.bDzpk_bGBk.bDzpk_busO.bDzpk_cQFX.bDzpk_bZNM,
.bettercanvas-todo-complete-btn,
.bettercanvas-card-grade,
.canvasrefined-todo-complete-btn,
.canvasrefined-card-grade,
div[style*='background-color: #fff'],
div[style*='background: #fff'],
div[style*='background-color: #ffffff'],
@ -175,7 +175,7 @@ span[style*='background: #fff'],
#comments-tray,
.css-d76rpr-view--inlineBlock[data-testid='tool-bar'],
.css-vxe90h-view--inlineBlock,
.bettercanvas-todo-actions,
.canvasrefined-todo-actions,
.css-sg1rn7-view {
background:var(--bcbackground-0)!important
}
@ -191,7 +191,7 @@ span[style*='background: #fff'],
#submit_file_button,
span[style*='background-color: #fbeeb8'],
.bettercanvas-todo-label {
.canvasrefined-todo-label {
color:var(--bcbackground-0)!important
}
@ -212,7 +212,7 @@ span[style*='background-color: #fbeeb8'],
.Button,
.ac-input-box,
.agenda-day.agenda-today,
.bettercanvas-assignment-container:hover,
.canvasrefined-assignment-container:hover,
.btn,
.discussion-reply-box,
.discussions-v2__wrapper>span>span>span>span>button>span,
@ -275,11 +275,11 @@ table.seas-homepage-table tr:nth-child(odd),
.list-view a.active,
#calendars-context-list .context_list_context:hover,
#other-calendars-context-list .context_list_context:hover,
.bettercanvas-todo-complete-btn:hover,
.bettercanvas-custom-btn,
.bettercanvas-skeleton-text,
.bettercanvas-hover-preview,
.bettercanvas-gpa-edit-btn,
.canvasrefined-todo-complete-btn:hover,
.canvasrefined-custom-btn,
.canvasrefined-skeleton-text,
.canvasrefined-hover-preview,
.canvasrefined-gpa-edit-btn,
div[style*='background-color: rgb(229, 242, 248)'],
div[style*='background-color: rgb(245, 245, 245)'],
.css-7naoe-textInp,
@ -288,7 +288,7 @@ div[style*='background-color: rgb(245, 245, 245)'],
#course_select_menu,
.css-1dn3ise-textInput__facade,
.css-1veueey-textInput__facade,
.bettercanvas-todo-action:hover {
.canvasrefined-todo-action:hover {
background:var(--bcbackground-1)!important
}
@ -296,7 +296,7 @@ div[style*='background-color: rgb(245, 245, 245)'],
fill:var(--bcbackground-1)!important
}
.bettercanvas-hover-preview::after {
.canvasrefined-hover-preview::after {
background:linear-gradient(0deg, var(--bcbackground-1) 50%, transparent)
}
@ -376,7 +376,7 @@ ul.outcome-level li:hover {
#calendar-drag-and-drop-container .fc-row .fc-content-skeleton td,
#calendar-drag-and-drop-container .fc-row .fc-helper-skeleton td,
.bettercanvas-course-credit,
.canvasrefined-course-credit,
#kl_content_block_0,
#kl_custom_block_0,
#kl_custom_block_1,
@ -431,7 +431,7 @@ ul.outcome-level li:hover {
.uneditable-input,
.unpinned-discussions-v2__wrapper,
form.question_form .form_answers .answer,
.bettercanvas-course-percent,
.canvasrefined-course-percent,
input[type=color],
input[type=date],
input[type=datetime-local],
@ -459,11 +459,11 @@ textarea,
.ui-state-default,
.ui-widget-header .ui-state-default,
.ui-widget-content,
.bettercanvas-custom-btn,
.bettercanvas-gpa-edit-btn,
.canvasrefined-custom-btn,
.canvasrefined-gpa-edit-btn,
.css-26xxi8-view--block,
.css-9fqfm7-view--block,
.bettercanvas-todo-actions {
.canvasrefined-todo-actions {
border:1px solid var(--bcborders)!important
}
@ -541,7 +541,7 @@ table.summary thead th,
.submission-details-header__heading-and-grades,
#right_side .content_box,
.assignment-student-header,
.bettercanvas-gpa-course {
.canvasrefined-gpa-course {
border-bottom:1px solid var(--bcborders)!important
}
@ -701,8 +701,8 @@ ul.outcome-level {
#kl_wrapper_3.kl_colored_headings_box_left>div>h3 i,
#kl_wrapper_3.kl_colored_headings_box_left>div>h3:not(.ui-state-default),
#kl_wrapper_3.kl_emta h3:not(.ui-state-default),
.bettercanvas-card-grade,
.bettercanvas-card-header,
.canvasrefined-card-grade,
.canvasrefined-card-header,
.discussion-fyi,
.ic-DashboardCard__action-badge,
.ic-app-header__menu-list-item.ic-app-header__menu-list-item--active .menu-item__text,
@ -711,13 +711,13 @@ ul.outcome-level {
.menu-item__badge,
.mini_calendar .day.other_month,
.ui-tabs .ui-tabs-nav li.ui-tabs-active a,
.bettercanvas-course-percent,
.bettercanvas-todo-container,
.bettercanvas-todo-container:hover,
.canvasrefined-course-percent,
.canvasrefined-todo-container,
.canvasrefined-todo-container:hover,
.MlJlv_ebWM,
.bettercanvas-todo-item,
.bettercanvas-todo-item:hover,
.bettercanvas-hover-preview,
.canvasrefined-todo-item,
.canvasrefined-todo-item:hover,
.canvasrefined-hover-preview,
.baylorMainContainer,
.baylor-table td,
.fOyUs_dUgE,
@ -742,13 +742,13 @@ h5,
h6,
#tinymce,
.PlannerItem-styles__type > span,
.bettercanvas-todo-actions {
.canvasrefined-todo-actions {
color:var(--bctext-0)!important
}
.ic-app-header__menu-list-item.ic-app-header__menu-list-item--active svg,
.ToDoSidebarItem__Icon,
.bettercanvas-todo-svg {
.canvasrefined-todo-svg {
fill:var(--bctext-0)!important
}
@ -764,7 +764,7 @@ h6,
#calendar-drag-and-drop-container .fc-agendaWeek-view .fc-widget-header,
#calendar-drag-and-drop-container .fc-month-view .fc-widget-header,
#content-wrapper .user_content.not_design_tools h3,
.bettercanvas-course-credit,
.canvasrefined-course-credit,
#kl_banner,
#kl_banner h2,
#kl_banner_left,
@ -798,8 +798,8 @@ h6,
.ToDoSidebarItem__Info li,
.ac-input-box,
.accessible-toggler,
.bettercanvas-assignment-container,
.bettercanvas-assignment-container:hover,
.canvasrefined-assignment-container,
.canvasrefined-assignment-container:hover,
.bjXfh_daKB,
.bjXfh_daKB span,
.cWmNi_bGBk,
@ -919,13 +919,13 @@ ic-tokeninput-input,
.dUOHu_eCSh,
.blnAQ_eCSh,
#gradebook_header,
.bettercanvas-assignment-link,
.bettercanvas-assignment-link:hover,
.canvasrefined-assignment-link,
.canvasrefined-assignment-link:hover,
.jumbotron,
.card,
.ac-token,
span[style='color: #000000;'],
.bettercanvas-gpa-edit-btn {
.canvasrefined-gpa-edit-btn {
color:var(--bctext-1)!important
}
@ -1005,7 +1005,7 @@ ul.outcome-level li.selected a::before,
.ic-unread-badge,
.cECYn_bXiG,
.unread-grade,
.bettercanvas-todo-label {
.canvasrefined-todo-label {
background:var(--bclinks)!important
}
@ -1097,7 +1097,7 @@ input[type=color].ic-Input:focus,
.extension-aldue:hover,
.ic-DashboardCard,
.navigation-tray-container,
.bettercanvas-gpa-card {
.canvasrefined-gpa-card {
box-shadow:0 2px 5px #00000080!important
}
@ -1180,7 +1180,7 @@ hr {
.ic-DashboardCard,
.ic-DashboardCard__header_content,
.bettercanvas-assignment-container,
.canvasrefined-assignment-container,
.recent_feedback .event-details {
background:none!important
}

File diff suppressed because one or more lines are too long

View File

@ -74,7 +74,7 @@ h2 {
border: 1px solid #323232;
border-radius: 8px;
}
.bettercanvas {
.canvasrefined {
display: inline-block;
background: -webkit-linear-gradient(0deg, #ff002e, #ff5200, #ff47ad);
-webkit-background-clip: text;

View File

@ -19,7 +19,7 @@ h2 {font-size:24px;}
.timeset span {margin-left: 8px;}
.header {font-size: 16px;display: flex;align-items: center;gap:12px; margin-bottom:14px;}
.header h1 { font-weight: 600; font-size:24px; }
#bclogo {height: 30px;width:30px;filter: grayscale(1) brightness(100)}
#bclogo {height: 30px;width:30px;filter: none}
#numAssignmentsSlider, #numTodoItemsSlider, #sidebarScaleSlider {display: block;margin-top: 14px;width: 100%;-webkit-appearance: none; appearance: none;background:var(--inputbg);outline: none;height:6px;border-radius:20px;}
#numAssignmentsSlider::-webkit-slider-thumb, #numTodoItemsSlider::-webkit-slider-thumb, #sidebarScaleSlider::-webkit-slider-thumb {-webkit-appearance: none; appearance: none;height: 18px; width: 18px;background: #727272;cursor: pointer;border-radius:30px;}
.option-container {font-size: 14px; margin-top: 8px;background: var(--containerbg);padding: 18px;border-radius: 14px;box-sizing:border-box}

View File

@ -2,7 +2,7 @@
<html lang="en">
<head>
<title>Better Canvas</title>
<title>Canvas Refined</title>
<link href="../css/options.css" rel="stylesheet">
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
@ -18,7 +18,7 @@
<div class="main-left">
<div class="container">
<div class="welcome">
<h1>Welcome to <span class="bettercanvas">Actually Better Canvas!</span></h1>
<h1>Welcome to <span class="canvasrefined">Canvas Refined!</span></h1>
<div id="refresh-note">
<p style="font-weight:600;">Refresh your Canvas page to setup</p>
<span id="finger2">&#128072;</span>
@ -33,7 +33,7 @@
</svg>
<span>Click on this puzzle icon at the top right</span>
</li>
<li class="steps-item"><img src="../icon/icon-48.png" class="icon">Click on Actually Better Canvas</li>
<li class="steps-item"><img src="../icon/icon-48.png" class="icon">Click on Canvas Refined</li>
<li class="steps-item">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" class="pin-icon icon">
<path

View File

@ -2,7 +2,7 @@
<html lang="en" style="/*background:linear-gradient(115deg, rgb(255, 53, 88), rgb(255, 131, 73), rgb(255, 103, 187))*/">
<head>
<title>Actually Better Canvas</title>
<title>Canvas Refined</title>
<link href="../css/popup.css" rel="stylesheet">
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
@ -23,7 +23,7 @@
<div class="main">
<div class="header">
<img id="bclogo" src="../icon/icon-128.png">
<h1 data-i18n="actually_better_canvas">Actually Better Canvas</h1>
<h1 data-i18n="Canvas Refined">Canvas Refined</h1>
</div>
<div class="more-options-container">
<button id="customize-dark-btn" class="big-button tab-btn">

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 16 KiB

View File

@ -1,99 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="170.44157mm"
height="25.759138mm"
viewBox="0 0 170.44158 25.759138"
version="1.1"
id="svg1"
inkscape:version="1.4.3 (0d15f75042, 2025-12-25)"
sodipodi:docname="NEWtitle.svg"
inkscape:export-filename="NEWtitle.png"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<sodipodi:namedview
id="namedview1"
pagecolor="#ffffff"
bordercolor="#000000"
borderopacity="0.25"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
inkscape:document-units="mm"
inkscape:zoom="1.2567484"
inkscape:cx="404.61558"
inkscape:cy="274.9158"
inkscape:window-width="1920"
inkscape:window-height="966"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="layer1" />
<defs
id="defs1">
<rect
x="269.51614"
y="36.03157"
width="89.358299"
height="26.663363"
id="rect2" />
<linearGradient
id="linearGradient1"
inkscape:collect="always">
<stop
style="stop-color:#ff1818;stop-opacity:1;"
offset="0"
id="stop1" />
<stop
style="stop-color:#ff0ec0;stop-opacity:1;"
offset="1"
id="stop2" />
</linearGradient>
<rect
x="47.451294"
y="48.934147"
width="705.83801"
height="167.56238"
id="rect1" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient1"
id="linearGradient2"
x1="48.628906"
y1="55.182617"
x2="132.06641"
y2="55.182617"
gradientUnits="userSpaceOnUse" />
</defs>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(0,0.47914756)">
<text
xml:space="preserve"
transform="matrix(1.9327416,0,0,1.9327416,-93.120927,-94.167478)"
id="text1"
style="writing-mode:lr-tb;direction:ltr;white-space:pre;shape-inside:url(#rect1);display:inline;fill:url(#linearGradient2)"><tspan
x="47.451172"
y="59.550781"
id="tspan3">Better Canvas</tspan></text>
<text
xml:space="preserve"
transform="matrix(0.76760109,-0.21673916,0.21673916,0.76760109,-150.80119,32.093741)"
id="text2"
style="writing-mode:lr-tb;direction:ltr;white-space:pre;shape-inside:url(#rect2);display:inline;fill:#1845ff;fill-opacity:1"><tspan
x="269.51562"
y="46.648438"
id="tspan5"><tspan
style="font-family:'Source Code Pro';-inkscape-font-specification:'Source Code Pro'"
id="tspan4">-er</tspan></tspan></text>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.5 KiB

After

Width:  |  Height:  |  Size: 7.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 593 B

After

Width:  |  Height:  |  Size: 818 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 691 B

After

Width:  |  Height:  |  Size: 929 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1004 B

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 KiB

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.5 KiB

After

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.7 KiB

View File

@ -106,7 +106,7 @@ chrome.runtime.onInstalled.addListener(function () {
}
};
const updateMsg = "Betterer Canvas was just updated!\nThis version added new themes, cumulative GPA into the GPA calculator, and a new sorting function for themes.";
const updateMsg = "Canvas Refined was just updated!\nThis version added new themes, cumulative GPA into the GPA calculator, and a new sorting function for themes.";
chrome.storage.local.get(null, local => {
chrome.storage.sync.get(null, async sync => {
@ -138,4 +138,4 @@ chrome.runtime.onInstalled.addListener(function () {
});
});
// chrome.runtime.setUninstallURL("https://diditupe.dev/bettercanvas/goodbye");
// chrome.runtime.setUninstallURL("https://diditupe.dev/canvasrefined/goodbye");

View File

@ -41,11 +41,11 @@ function addSubmissionPageButton() {
const assignmentLink = getSubmissionAssignmentLink();
if (!assignmentLink) return;
const content = document.getElementById("content");
if (!content || content.querySelector("#bettercanvas-assignment-return")) return;
if (!content || content.querySelector("#canvasrefined-assignment-return")) return;
makeElement("a", content, {
id: "bettercanvas-assignment-return",
className: "bettercanvas-custom-btn",
id: "canvasrefined-assignment-return",
className: "canvasrefined-custom-btn",
href: assignmentLink,
textContent: "Back to Assignment",
style: "display:inline-flex;align-items:center;justify-content:center;align-self:flex-start;margin:0 0 12px 0;padding:10px 14px;text-decoration:none;font-weight:700;",
@ -92,9 +92,9 @@ function ensureSubmissionPageButton() {
if (!assignmentLink) return false;
const content = document.getElementById("content");
if (!content) return false;
if (content.querySelector("#bettercanvas-assignment-return")) return true;
if (content.querySelector("#canvasrefined-assignment-return")) return true;
addSubmissionPageButton();
return Boolean(content.querySelector("#bettercanvas-assignment-return"));
return Boolean(content.querySelector("#canvasrefined-assignment-return"));
}
function watchSubmissionPageButton() {
@ -261,13 +261,13 @@ async function hideReminder(href) {
function createReminder(reminder, location) {
const remaining = getRelativeDate(new Date(reminder.d));
const wrapper = makeElement("div", location, { "className": "bettercanvas-reminder-wrapper" });
const container = makeElement("div", wrapper, { "className": "bettercanvas-reminder-container" });
const wrapper = makeElement("div", location, { "className": "canvasrefined-reminder-wrapper" });
const container = makeElement("div", wrapper, { "className": "canvasrefined-reminder-container" });
const svg = makeElement("div", container, { "innerHTML": canvas_svg });
const content = makeElement("a", container, { "className": "bettercanvas-reminder-content", "href": reminder.h, "target": "_blank" });
const title = makeElement("h2", content, { "className": "bettercanvas-reminder-title", "textContent": reminder.t });
const due = makeElement("p", content, { "className": "bettercanvas-reminder-due", "textContent": `Assignment due in ${remaining.time}` });
const hidebtn = makeElement("btn", wrapper, { "className": "bettercanvas-reminder-hide", "textContent": "x" });
const content = makeElement("a", container, { "className": "canvasrefined-reminder-content", "href": reminder.h, "target": "_blank" });
const title = makeElement("h2", content, { "className": "canvasrefined-reminder-title", "textContent": reminder.t });
const due = makeElement("p", content, { "className": "canvasrefined-reminder-due", "textContent": `Assignment due in ${remaining.time}` });
const hidebtn = makeElement("btn", wrapper, { "className": "canvasrefined-reminder-hide", "textContent": "x" });
hidebtn.addEventListener("click", () => {
hideReminder(reminder.h);
wrapper.remove();
@ -278,10 +278,10 @@ function createReminder(reminder, location) {
async function reminderWatch() {
const sync = await chrome.storage.sync.get("remind");
if (sync["remind"] !== true) {
if (document.getElementById("bettercanvas-reminders")) document.getElementById("bettercanvas-reminders").style.display = "none";
if (document.getElementById("canvasrefined-reminders")) document.getElementById("canvasrefined-reminders").style.display = "none";
return;
}
const container = document.getElementById("bettercanvas-reminders") || makeElement("div", document.body, { "id": "bettercanvas-reminders" });
const container = document.getElementById("canvasrefined-reminders") || makeElement("div", document.body, { "id": "canvasrefined-reminders" });
container.style.display = "flex";
container.textContent = "";
const alertPeriod = 1000 * 60 * 60 * 6; // 6 hours
@ -317,14 +317,14 @@ function updateReminders() {
}
function showExampleReminder() {
const location = document.getElementById("bettercanvas-reminders") || makeElement("div", document.body, { "id": "bettercanvas-reminders" });
const location = document.getElementById("canvasrefined-reminders") || makeElement("div", document.body, { "id": "canvasrefined-reminders" });
if (options.remind !== true) {
location.remove();
return;
}
location.textContent = "";
const example = createReminder({ "d": new Date(), "t": "This is an example reminder", }, location);
example.querySelector(".bettercanvas-reminder-due").textContent = "This notification will pop up in other pages to remind you of incomplete assignments that are due in less than 6 hours." /*It will notify again at 2 hours if the 'Remind 2x' option is on."*/;
example.querySelector(".canvasrefined-reminder-due").textContent = "This notification will pop up in other pages to remind you of incomplete assignments that are due in less than 6 hours." /*It will notify again at 2 hours if the 'Remind 2x' option is on."*/;
}
// async function ScheduledReminderCheck() {
@ -334,7 +334,7 @@ function showExampleReminder() {
// if (options.scheduledReminderTime) {
// let [hour, minute] = options.scheduledReminderTime.split(":");
// if (parseInt(hour) == currentHour && parseInt(minute) == currentMinute) {
// const container = document.getElementById("bettercanvas-reminders") || makeElement("div", document.body, { "id": "bettercanvas-reminders" });
// const container = document.getElementById("canvasrefined-reminders") || makeElement("div", document.body, { "id": "canvasrefined-reminders" });
// container.style.display = "flex";
// container.textContent = "";
// const storage = await chrome.storage.sync.get("reminders");
@ -422,7 +422,7 @@ function startExtension() {
chrome.storage.onChanged.addListener(applyOptionsChanges);
console.log("Better Canvas - running");
console.log("Canvas Refined - running");
}
function applyOptionsChanges(changes) {
@ -463,7 +463,7 @@ function applyOptionsChanges(changes) {
case "num_assignments":
if (!assignments) getAssignments();
if (
document.querySelectorAll(".bettercanvas-card-assignment")
document.querySelectorAll(".canvasrefined-card-assignment")
.length === 0
)
setupCardAssignments();
@ -493,7 +493,7 @@ function applyOptionsChanges(changes) {
moreAssignmentCount = 0;
// loadBetterTodo();
clearTodoList();
createTodoSections(document.querySelector("#bettercanvas-todo-list"));
createTodoSections(document.querySelector("#canvasrefined-todo-list"));
break;
case "gpa_calc":
case "gpa_calc_prepend":
@ -620,8 +620,8 @@ function ensureBetterSidebar() {
function applyCustomBackground() {
// let style = document.querySelector("#DashboardCard_Container")
let style = document.querySelector("#bettercanvas-background") || document.createElement('style');
style.id = "bettercanvas-background";
let style = document.querySelector("#canvasrefined-background") || document.createElement('style');
style.id = "canvasrefined-background";
if (options.customBackgroundLink && options.customBackgroundLink !== "") {
style.textContent = `
@ -765,8 +765,8 @@ function applyCustomBackground() {
backdrop-filter: blur(5px) !important;
-webkit-backdrop-filter: blur(5px) !important;
}
.bettercanvas-gpa-card,
.bettercanvas-gpa,
.canvasrefined-gpa-card,
.canvasrefined-gpa,
.ic-DashboardCard {
background: var(--bcbackground-0) !important;
}
@ -779,13 +779,13 @@ function applyCustomBackground() {
document.documentElement.appendChild(style);
}
function clearCustomBackground() {
let style = document.querySelector("#bettercanvas-background");
let style = document.querySelector("#canvasrefined-background");
if (style) style.remove();
}
function applyBetterSidebarLayoutFix() {
let style = document.querySelector("#bettercanvas-sidebar-layout-fix") || document.createElement("style");
style.id = "bettercanvas-sidebar-layout-fix";
let style = document.querySelector("#canvasrefined-sidebar-layout-fix") || document.createElement("style");
style.id = "canvasrefined-sidebar-layout-fix";
style.textContent = `
#wrapper,
.ic-Layout-wrapper,
@ -797,7 +797,7 @@ function applyBetterSidebarLayoutFix() {
}
function clearBetterSidebarLayoutFix() {
let style = document.querySelector("#bettercanvas-sidebar-layout-fix");
let style = document.querySelector("#canvasrefined-sidebar-layout-fix");
if (style) style.remove();
}
@ -837,7 +837,7 @@ function checkDashboardReady() {
}
const rightSide = document.querySelector("#right-side");
if (rightSide && !rightSide.querySelector(".bettercanvas-todosidebar")) {
if (rightSide && !rightSide.querySelector(".canvasrefined-todosidebar")) {
setupBetterTodo();
setupBetterSidebar(getSidebarLayoutMode());
}
@ -1123,17 +1123,17 @@ Better todo list
// }
function createTodoCreateBtn(location) {
let confirmButton = makeElement("button", location, { "className": "bettercanvas-custom-btn", "textContent": "Create" });
let confirmButton = makeElement("button", location, { "className": "canvasrefined-custom-btn", "textContent": "Create" });
confirmButton.addEventListener("click", () => {
chrome.storage.sync.get("custom_assignments_overflow", overflow => {
chrome.storage.sync.get(overflow["custom_assignments_overflow"], storage => {
let course_id = parseInt(location.querySelector("#bettercanvas-custom-course").value);
let course_id = parseInt(location.querySelector("#canvasrefined-custom-course").value);
const assignment = {
"plannable_id": new Date().getTime(),
"context_name": options.custom_cards[location.querySelector("#bettercanvas-custom-course").value].default,
"plannable": { "title": location.querySelector("#bettercanvas-custom-name").value },
"plannable_date": location.querySelector("#bettercanvas-custom-date").value + "T" + location.querySelector("#bettercanvas-custom-time").value + ":00",
"context_name": options.custom_cards[location.querySelector("#canvasrefined-custom-course").value].default,
"plannable": { "title": location.querySelector("#canvasrefined-custom-name").value },
"plannable_date": location.querySelector("#canvasrefined-custom-date").value + "T" + location.querySelector("#canvasrefined-custom-time").value + ":00",
"planner_override": { "marked_complete": false, "custom": true },
"plannable_type": "assignment",
"submissions": { "submitted": false },
@ -1145,7 +1145,7 @@ function createTodoCreateBtn(location) {
let found = false;
let reload = () => {
location.classList.toggle("bettercanvas-custom-open");
location.classList.toggle("canvasrefined-custom-open");
loadBetterTodo();
loadCardAssignments();
}
@ -1186,27 +1186,27 @@ function createTodoCreateBtn(location) {
// let todoHeader = makeElement("h2", location, { "className": "todo-list-header", "style": "display: flex; align-items:center; justify-content:space-between;" });
// //todoHeader.style = "display: flex; align-items:center; justify-content:space-between;";
// if (!options.custom_cards || Object.keys(options.custom_cards).length === 0) return;
// let addFillout = makeElement("div", location, { "className": "bettercanvas-add-assignment" });
// let addFillout = makeElement("div", location, { "className": "canvasrefined-add-assignment" });
// let now = new Date();
// let year = now.getFullYear();
// let month = now.getMonth() + 1;
// let day = now.getDate();
// month = month < 10 ? "0" + month : month;
// day = day < 10 ? "0" + day : day;
// addFillout.innerHTML = '<input type="text" placeholder="Name" id="bettercanvas-custom-name" class="bettercanvas-custom-input"></input><select id="bettercanvas-custom-course" class="bettercanvas-custom-input"><option value="" disabled selected>Select course</option></select><div style="display: flex;gap:5px"><input type="date" id="bettercanvas-custom-date" class="bettercanvas-custom-input"></input><input type="time" id="bettercanvas-custom-time" class="bettercanvas-custom-input" value="23:59"></input></div>';
// addFillout.querySelector("#bettercanvas-custom-date").value = year + "-" + month + "-" + day;
// let selectCourse = document.querySelector("#bettercanvas-custom-course");
// addFillout.innerHTML = '<input type="text" placeholder="Name" id="canvasrefined-custom-name" class="canvasrefined-custom-input"></input><select id="canvasrefined-custom-course" class="canvasrefined-custom-input"><option value="" disabled selected>Select course</option></select><div style="display: flex;gap:5px"><input type="date" id="canvasrefined-custom-date" class="canvasrefined-custom-input"></input><input type="time" id="canvasrefined-custom-time" class="canvasrefined-custom-input" value="23:59"></input></div>';
// addFillout.querySelector("#canvasrefined-custom-date").value = year + "-" + month + "-" + day;
// let selectCourse = document.querySelector("#canvasrefined-custom-course");
// Object.keys(options.custom_cards).forEach(id => {
// let card = options.custom_cards[id];
// let courseName = makeElement("option", selectCourse, { "className": "bettercanvas-select-course-option", "textContent": card.default });
// let courseName = makeElement("option", selectCourse, { "className": "canvasrefined-select-course-option", "textContent": card.default });
// courseName.value = id;
// });
// createTodoCreateBtn(addFillout);
// let headerText = makeElement("span", todoHeader, { "className": "bettercanvas-todo-header", "textContent": "To Do" });
// let addButton = makeElement("button", todoHeader, { "className": "bettercanvas-custom-btn", "textContent": "+ Add" });
// let headerText = makeElement("span", todoHeader, { "className": "canvasrefined-todo-header", "textContent": "To Do" });
// let addButton = makeElement("button", todoHeader, { "className": "canvasrefined-custom-btn", "textContent": "+ Add" });
// addButton.addEventListener("click", () => {
// addFillout.classList.toggle("bettercanvas-custom-open");
// addFillout.classList.toggle("canvasrefined-custom-open");
// });
// headerText.addEventListener("click", () => {
@ -1345,15 +1345,15 @@ function renderProgressRings(container, scopedData) {
const dasharrayVal = circumference.toFixed(3);
const dashoffsetTarget = (circumference * (1 - prog)).toFixed(3);
// start with full offset (empty) and store target in data attribute; we'll animate after inserting into DOM
svgInner += `<circle class='bettercanvas-progress-ring' cx='${cx}' cy='${cy}' r='${radius}' stroke='${color}' stroke-width='${stroke}' fill='none' stroke-linecap='round' transform='rotate(-90 ${cx} ${cy})' stroke-dasharray='${dasharrayVal}' stroke-dashoffset='${dasharrayVal}' data-target='${dashoffsetTarget}' style='transition: stroke-dashoffset .8s cubic-bezier(.2,.9,.2,1), opacity .3s ease;'></circle>`;
svgInner += `<circle class='canvasrefined-progress-ring' cx='${cx}' cy='${cy}' r='${radius}' stroke='${color}' stroke-width='${stroke}' fill='none' stroke-linecap='round' transform='rotate(-90 ${cx} ${cy})' stroke-dasharray='${dasharrayVal}' stroke-dashoffset='${dasharrayVal}' data-target='${dashoffsetTarget}' style='transition: stroke-dashoffset .8s cubic-bezier(.2,.9,.2,1), opacity .3s ease;'></circle>`;
});
// center overlay text positioned inside the hole
// Reuse existing elements when possible to avoid DOM replacement flicker
let wrapper = container.querySelector('.bettercanvas-progress-wrapper');
let wrapper = container.querySelector('.canvasrefined-progress-wrapper');
if (!wrapper) {
wrapper = document.createElement('div');
wrapper.className = 'bettercanvas-progress-wrapper';
wrapper.className = 'canvasrefined-progress-wrapper';
wrapper.style.display = 'flex';
wrapper.style.flexDirection = 'column';
wrapper.style.alignItems = 'center';
@ -1362,10 +1362,10 @@ function renderProgressRings(container, scopedData) {
}
// svg container
let svg = wrapper.querySelector('svg.bettercanvas-progress-svg');
let svg = wrapper.querySelector('svg.canvasrefined-progress-svg');
if (!svg) {
svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg');
svg.setAttribute('class', 'bettercanvas-progress-svg');
svg.setAttribute('class', 'canvasrefined-progress-svg');
svg.setAttribute('width', String(size));
svg.setAttribute('height', String(size));
svg.setAttribute('viewBox', `0 0 ${size} ${size}`);
@ -1378,10 +1378,10 @@ function renderProgressRings(container, scopedData) {
}
// ensure overlay text exists
let overlay = wrapper.querySelector('.bettercanvas-progress-overlay');
let overlay = wrapper.querySelector('.canvasrefined-progress-overlay');
if (!overlay) {
overlay = document.createElement('div');
overlay.className = 'bettercanvas-progress-overlay';
overlay.className = 'canvasrefined-progress-overlay';
overlay.style.position = 'absolute';
overlay.style.left = '0';
overlay.style.top = '0';
@ -1394,19 +1394,19 @@ function renderProgressRings(container, scopedData) {
const textWrap = document.createElement('div');
textWrap.style.textAlign = 'center';
textWrap.style.color = 'var(--bctext-0)';
textWrap.innerHTML = `<div class='bettercanvas-progress-percent' style='font-weight:700;font-size:20px;line-height:1;'>${percent}%</div><div class='bettercanvas-progress-count' style='font-size:12px;margin-top:4px;'>${completedAll}/${totalAll} done</div>`;
textWrap.innerHTML = `<div class='canvasrefined-progress-percent' style='font-weight:700;font-size:20px;line-height:1;'>${percent}%</div><div class='canvasrefined-progress-count' style='font-size:12px;margin-top:4px;'>${completedAll}/${totalAll} done</div>`;
overlay.appendChild(textWrap);
wrapper.appendChild(overlay);
} else {
const pc = overlay.querySelector('.bettercanvas-progress-percent');
const cnt = overlay.querySelector('.bettercanvas-progress-count');
const pc = overlay.querySelector('.canvasrefined-progress-percent');
const cnt = overlay.querySelector('.canvasrefined-progress-count');
if (pc) pc.textContent = `${percent}%`;
if (cnt) cnt.textContent = `${completedAll}/${totalAll} done`;
}
// Update or create rings in-place
const existingBg = svg.querySelectorAll('circle.bettercanvas-ring-bg');
const existingFg = svg.querySelectorAll('circle.bettercanvas-progress-ring');
const existingBg = svg.querySelectorAll('circle.canvasrefined-ring-bg');
const existingFg = svg.querySelectorAll('circle.canvasrefined-progress-ring');
// reuse or create circles per shown entry
shown.forEach((entry, idx) => {
@ -1416,10 +1416,10 @@ function renderProgressRings(container, scopedData) {
const color = options.custom_cards_3?.[String(entry.courseId)]?.color || options.custom_cards_3?.[entry.courseId]?.color || `hsl(${(idx * 60) % 360} 70% 50%)`;
// background circle
let bg = svg.querySelector(`circle.bettercanvas-ring-bg[data-idx='${idx}']`);
let bg = svg.querySelector(`circle.canvasrefined-ring-bg[data-idx='${idx}']`);
if (!bg) {
bg = document.createElementNS('http://www.w3.org/2000/svg', 'circle');
bg.classList.add('bettercanvas-ring-bg');
bg.classList.add('canvasrefined-ring-bg');
bg.setAttribute('data-idx', String(idx));
svg.appendChild(bg);
}
@ -1432,12 +1432,12 @@ function renderProgressRings(container, scopedData) {
bg.setAttribute('fill', 'none');
// foreground (progress) circle
let fg = svg.querySelector(`circle.bettercanvas-progress-ring[data-idx='${idx}']`);
let fg = svg.querySelector(`circle.canvasrefined-progress-ring[data-idx='${idx}']`);
const dasharrayVal = circumference.toFixed(3);
const dashoffsetTarget = (circumference * (1 - prog)).toFixed(3);
if (!fg) {
fg = document.createElementNS('http://www.w3.org/2000/svg', 'circle');
fg.classList.add('bettercanvas-progress-ring');
fg.classList.add('canvasrefined-progress-ring');
fg.setAttribute('data-idx', String(idx));
fg.setAttribute('stroke-linecap', 'round');
fg.setAttribute('transform', `rotate(-90 ${cx} ${cy})`);
@ -1465,7 +1465,7 @@ function renderProgressRings(container, scopedData) {
// remove any extra existing circles
const maxIdx = shown.length - 1;
svg.querySelectorAll('circle.bettercanvas-ring-bg, circle.bettercanvas-progress-ring').forEach(c => {
svg.querySelectorAll('circle.canvasrefined-ring-bg, circle.canvasrefined-progress-ring').forEach(c => {
const idx = parseInt(c.getAttribute('data-idx'));
if (Number.isNaN(idx) || idx > maxIdx) c.remove();
});
@ -1618,28 +1618,28 @@ function ensureTodoTaskMenu(location, feedbackElement) {
const addTaskButton = makeElement("button", actionsRow, {
id: "better-todo-add-task-btn",
className: "bettercanvas-custom-btn",
className: "canvasrefined-custom-btn",
textContent: "+ Add Task",
style: "width:100%;padding:6px 8px;cursor:pointer;",
});
const menu = makeElement("div", actionsRow, {
id: "better-todo-add-task-menu",
className: "bettercanvas-add-assignment",
className: "canvasrefined-add-assignment",
});
menu.innerHTML = `
<div style="display:flex;flex-direction:column;gap:8px;padding:8px;border:1px solid #c7cdd1;border-radius:6px;background:var(--bcbackground-2);">
<input type="text" id="better-todo-new-task-title" class="bettercanvas-custom-input" placeholder="Task title" maxlength="255">
<textarea id="better-todo-new-task-details" class="bettercanvas-custom-input" placeholder="Details (optional)" style="min-height:70px;resize:vertical;padding-top:6px;padding-bottom:6px;"></textarea>
<select id="better-todo-new-task-course" class="bettercanvas-custom-input"></select>
<input type="text" id="better-todo-new-task-title" class="canvasrefined-custom-input" placeholder="Task title" maxlength="255">
<textarea id="better-todo-new-task-details" class="canvasrefined-custom-input" placeholder="Details (optional)" style="min-height:70px;resize:vertical;padding-top:6px;padding-bottom:6px;"></textarea>
<select id="better-todo-new-task-course" class="canvasrefined-custom-input"></select>
<div style="display:flex;gap:6px;">
<input type="date" id="better-todo-new-task-date" class="bettercanvas-custom-input">
<input type="time" id="better-todo-new-task-time" class="bettercanvas-custom-input">
<input type="date" id="better-todo-new-task-date" class="canvasrefined-custom-input">
<input type="time" id="better-todo-new-task-time" class="canvasrefined-custom-input">
</div>
<div style="display:flex;justify-content:space-between;align-items:center;gap:8px;">
<span id="better-todo-add-task-status" style="font-size:12px;color:var(--bctext-0);"></span>
<button id="better-todo-add-task-submit" class="bettercanvas-custom-btn" style="padding:4px 10px;cursor:pointer;" type="button">Create</button>
<button id="better-todo-add-task-submit" class="canvasrefined-custom-btn" style="padding:4px 10px;cursor:pointer;" type="button">Create</button>
</div>
</div>
`;
@ -1653,7 +1653,7 @@ function ensureTodoTaskMenu(location, feedbackElement) {
courseSelect.addEventListener("change", () => updateTaskCourseSelectColor(courseSelect));
addTaskButton.addEventListener("click", () => {
menu.classList.toggle("bettercanvas-custom-open");
menu.classList.toggle("canvasrefined-custom-open");
});
menu.querySelector("#better-todo-add-task-submit").addEventListener("click", async () => {
@ -1669,7 +1669,7 @@ function ensureTodoTaskMenu(location, feedbackElement) {
status.style.color = "#198754";
menu.querySelector("#better-todo-new-task-title").value = "";
menu.querySelector("#better-todo-new-task-details").value = "";
menu.classList.remove("bettercanvas-custom-open");
menu.classList.remove("canvasrefined-custom-open");
getAssignments();
clearTodoList();
@ -1895,8 +1895,8 @@ async function createTodoSections(location) {
}
function ensureRightSideWrapperScrollbarHidden() {
let style = document.getElementById("bettercanvas-hide-right-sidebar-scrollbar") || document.createElement("style");
style.id = "bettercanvas-hide-right-sidebar-scrollbar";
let style = document.getElementById("canvasrefined-hide-right-sidebar-scrollbar") || document.createElement("style");
style.id = "canvasrefined-hide-right-sidebar-scrollbar";
style.textContent = `
#right-side-wrapper {
scrollbar-width: none !important;
@ -2047,7 +2047,7 @@ function populateAssignments(iscompleted = false) {
let seeMoreButton = makeElement("button", document.getElementById("better-todo-main"), {
textContent: `View More (${assignmentCount - maxElements})`,
className: "bettercanvas-custom-btn",
className: "canvasrefined-custom-btn",
id: "better-todo-see-more",
style: "width:100%;margin-top:15px;cursor:pointer;"
})
@ -2124,7 +2124,7 @@ function createConfettiBurst(targetElement, opts = {}) {
const colors = opts.colors || ['#ff4d4f', '#ffc107', '#28a745', '#17a2b8', '#6f42c1', '#ff6b6b', '#ff8a65', '#ffd54f'];
const rect = targetElement.getBoundingClientRect();
const container = document.createElement('div');
container.className = 'bettercanvas-confetti-container';
container.className = 'canvasrefined-confetti-container';
container.style.position = 'fixed';
container.style.left = '0';
container.style.top = '0';
@ -2139,7 +2139,7 @@ function createConfettiBurst(targetElement, opts = {}) {
for (let i = 0; i < count; i++) {
const el = document.createElement('div');
el.className = 'bettercanvas-confetti';
el.className = 'canvasrefined-confetti';
const w = 4 + Math.floor(Math.random() * 7); // smaller pieces
const h = Math.max(3, Math.floor(w * (0.4 + Math.random() * 0.8)));
el.style.position = 'absolute';
@ -2289,7 +2289,7 @@ function markAs(item, element) {
setTimeout(() => {
clearTodoList();
createTodoSections(document.querySelector("#bettercanvas-todo-list"));
createTodoSections(document.querySelector("#canvasrefined-todo-list"));
}, 400);
}
})
@ -2298,8 +2298,8 @@ function markAs(item, element) {
}
function createTodoViewMore(location, type) {
let viewMoreButton = makeElement("button", location, { "className": "bettercanvas-custom-btn bettercanvas-viewmore-btn", "textContent": "View More" });
//viewMoreButton.classList.add("bettercanvas-viewmore-btn");
let viewMoreButton = makeElement("button", location, { "className": "canvasrefined-custom-btn canvasrefined-viewmore-btn", "textContent": "View More" });
//viewMoreButton.classList.add("canvasrefined-viewmore-btn");
const showMoreCount = 3;
viewMoreButton.addEventListener("click", function (e) {
if (type === "announcement") {
@ -2314,16 +2314,16 @@ function createTodoViewMore(location, type) {
// better todo init
function setupBetterTodo() {
if (options.better_todo !== true || isGradesPage()) return;
if (document.querySelector('#bettercanvas-todo-list')) return;
if (document.querySelector('#canvasrefined-todo-list')) return;
let list = document.querySelector("#right-side");
if (!list) return;
//if (!list || list.childElementCount === 0 || list.children[0].id === "bettercanvas-todo-list") return;
//if (!list || list.childElementCount === 0 || list.children[0].id === "canvasrefined-todo-list") return;
try {
/* save the feedback to append it later */
const feedback = list.querySelector(".events_list.recent_feedback");
list.textContent = "";
list = makeElement("div", list, { "className": "bettercanvas-todosidebar","id": "bettercanvas-todo-list"});
list = makeElement("div", list, { "className": "canvasrefined-todosidebar","id": "canvasrefined-todo-list"});
createTodoSections(list);
if (feedback) list.append(feedback);
@ -2458,7 +2458,7 @@ async function setupBetterSidebar(mode = getSidebarLayoutMode()) {
function createSidebarButton(text, url, parent, icon) {
let button = makeElement("a", parent, {
style: "width:40%;height:var(--bc-sidebar-btn-height,30px);cursor:pointer;text-align:center;text-decoration:none;display:inline-flex;justify-content:center;align-items:center;gap:var(--bc-sidebar-btn-gap,8px);color:var(--bctext-0) !important;font-weight:bold;position:relative;",
className: "bettercanvas-custom-btn better-sidebar-btn",
className: "canvasrefined-custom-btn better-sidebar-btn",
href: url,
});
button.innerHTML = `${icon ? `${icon}<span class="better-sidebar-label" style="font-size:var(--bc-sidebar-label-size,14px);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0;">${text}</span>` : `<span class="better-sidebar-label" style="font-size:var(--bc-sidebar-label-size,14px);">${text}</span>`}`;
@ -2657,10 +2657,10 @@ async function loadBetterTodo() {
if (options.better_todo !== true || isGradesPage()) return;
try {
await getColors();
const discussion_svg = '<svg class="bettercanvas-todo-svg" name="IconDiscussion" viewBox="0 0 1920 1920" rotate="0" aria-hidden="true" role="presentation" focusable="false" ><g role="presentation"><path d="M677.647059,16 L677.647059,354.936471 L790.588235,354.936471 L790.588235,129.054118 L1807.05882,129.054118 L1807.05882,919.529412 L1581.06353,919.529412 L1581.06353,1179.29412 L1321.41176,919.529412 L1242.24,919.529412 L1242.24,467.877647 L677.647059,467.877647 L0,467.877647 L0,1484.34824 L338.710588,1484.34824 L338.710588,1903.24706 L756.705882,1484.34824 L1242.24,1484.34824 L1242.24,1032.47059 L1274.99294,1032.47059 L1694.11765,1451.59529 L1694.11765,1032.47059 L1920,1032.47059 L1920,16 L677.647059,16 Z M338.789647,919.563294 L903.495529,919.563294 L903.495529,806.622118 L338.789647,806.622118 L338.789647,919.563294 Z M338.789647,1145.44565 L677.726118,1145.44565 L677.726118,1032.39153 L338.789647,1032.39153 L338.789647,1145.44565 Z M112.941176,580.705882 L1129.41176,580.705882 L1129.41176,1371.40706 L710.4,1371.40706 L451.651765,1631.05882 L451.651765,1371.40706 L112.941176,1371.40706 L112.941176,580.705882 Z" fill-rule="evenodd" stroke="none" stroke-width="1"></path></g></svg>';
const quiz_svg = '<svg class="bettercanvas-todo-svg" label="Quiz" name="IconQuiz" viewBox="0 0 1920 1920" rotate="0" aria-hidden="true" role="presentation" focusable="false" ><g role="presentation"><g fill-rule="evenodd" stroke="none" stroke-width="1"><path d="M746.255375,1466.76417 L826.739372,1547.47616 L577.99138,1796.11015 L497.507383,1715.51216 L746.255375,1466.76417 Z M580.35118,1300.92837 L660.949178,1381.52637 L329.323189,1713.15236 L248.725192,1632.55436 L580.35118,1300.92837 Z M414.503986,1135.20658 L495.101983,1215.80457 L80.5979973,1630.30856 L0,1549.71056 L414.503986,1135.20658 Z M1119.32036,264.600006 C1475.79835,-91.8779816 1844.58834,86.3040124 1848.35034,88.1280123 L1848.35034,88.1280123 L1865.45034,96.564012 L1873.88634,113.664011 C1875.71034,117.312011 2053.89233,486.101999 1697.30034,842.693987 L1697.30034,842.693987 L1550.69635,989.297982 L1548.07435,1655.17196 L1325.43235,1877.81395 L993.806366,1546.30196 L415.712386,968.207982 L84.0863971,636.467994 L306.72839,413.826001 L972.602367,411.318001 Z M1436.24035,1103.75398 L1074.40436,1465.70397 L1325.43235,1716.61796 L1434.30235,1607.74796 L1436.24035,1103.75398 Z M1779.26634,182.406009 C1710.18234,156.41401 1457.90035,87.1020124 1199.91836,345.198004 L1199.91836,345.198004 L576.90838,968.207982 L993.806366,1385.10597 L1616.70235,762.095989 C1873.65834,505.139998 1804.68834,250.920007 1779.26634,182.406009 Z M858.146371,525.773997 L354.152388,527.597997 L245.282392,636.467994 L496.310383,887.609985 L858.146371,525.773997 Z"></path><path d="M1534.98715,372.558003 C1483.91515,371.190003 1403.31715,385.326002 1321.69316,466.949999 L1281.22316,507.305998 L1454.61715,680.585992 L1494.97315,640.343994 C1577.16715,558.035996 1591.87315,479.033999 1589.82115,427.164001 L1587.65515,374.610003 L1534.98715,372.558003 Z"></path></g></g></svg>';
const announcement_svg = '<svg class="bettercanvas-todo-svg" label="Announcement" name="IconAnnouncement" viewBox="0 0 1920 1920" rotate="0" aria-hidden="true" role="presentation" focusable="false" ><g role="presentation"><path d="M1587.16235,31.2784941 C1598.68235,7.78672942 1624.43294,-4.41091764 1650.63529,1.46202354 C1676.16,7.56084707 1694.11765,30.2620235 1694.11765,56.4643765 L1694.11765,56.4643765 L1694.11765,570.459671 C1822.87059,596.662024 1920,710.732612 1920,847.052612 C1920,983.372612 1822.87059,1097.55614 1694.11765,1123.75849 L1694.11765,1123.75849 L1694.11765,1637.64085 C1694.11765,1663.8432 1676.16,1686.65732 1650.63529,1692.6432 C1646.23059,1693.65967 1641.93882,1694.11144 1637.64706,1694.11144 C1616.52706,1694.11144 1596.87529,1682.36555 1587.16235,1662.93967 C1379.23765,1247.2032 964.178824,1242.34673 960,1242.34673 L960,1242.34673 L564.705882,1242.34673 L564.705882,1807.05261 L652.461176,1807.05261 C640.602353,1716.92555 634.955294,1560.05026 715.934118,1456.37026 C768.338824,1389.2832 845.590588,1355.28791 945.882353,1355.28791 L945.882353,1355.28791 L945.882353,1468.22908 C881.392941,1468.22908 835.312941,1487.09026 805.044706,1525.71614 C736.263529,1613.58438 759.981176,1789.54673 774.776471,1849.97026 C778.955294,1866.79849 775.115294,1884.6432 764.498824,1898.30908 C753.769412,1911.97496 737.28,1919.99379 720,1919.99379 L720,1919.99379 L508.235294,1919.99379 C477.063529,1919.99379 451.764706,1894.80791 451.764706,1863.5232 L451.764706,1863.5232 L451.764706,1242.34673 L395.294118,1242.34673 C239.548235,1242.34673 112.941176,1115.73967 112.941176,959.993788 L112.941176,959.993788 L112.941176,903.5232 L56.4705882,903.5232 C25.2988235,903.5232 0,878.337318 0,847.052612 C0,815.880847 25.2988235,790.582024 56.4705882,790.582024 L56.4705882,790.582024 L112.941176,790.582024 L112.941176,734.111435 C112.941176,578.478494 239.548235,451.758494 395.294118,451.758494 L395.294118,451.758494 L959.887059,451.758494 C976.828235,451.645553 1380.36706,444.756141 1587.16235,31.2784941 Z M1581.17647,249.706729 C1386.46588,492.078494 1128.96,547.871435 1016.47059,560.746729 L1016.47059,560.746729 L1016.47059,1133.47144 C1128.96,1146.34673 1386.46588,1202.02673 1581.17647,1444.51144 L1581.17647,1444.51144 Z M903.529412,564.699671 L395.294118,564.699671 C301.891765,564.699671 225.882353,640.709082 225.882353,734.111435 L225.882353,734.111435 L225.882353,959.993788 C225.882353,1053.39614 301.891765,1129.40555 395.294118,1129.40555 L395.294118,1129.40555 L903.529412,1129.40555 L903.529412,564.699671 Z M1694.11765,688.144376 L1694.11765,1006.07379 C1759.73647,982.694965 1807.05882,920.577318 1807.05882,847.052612 C1807.05882,773.527906 1759.73647,711.5232 1694.11765,688.144376 L1694.11765,688.144376 Z" fill-rule="evenodd" stroke="none" stroke-width="1"></path></g></svg>';
const assignment_svg = '<svg class="bettercanvas-todo-svg" label="Assignment" name="IconAssignment" viewBox="0 0 1920 1920" rotate="0" aria-hidden="true" role="presentation" focusable="false"><g role="presentation"><path d="M1468.2137,0 L1468.2137,564.697578 L1355.27419,564.697578 L1355.27419,112.939516 L112.939516,112.939516 L112.939516,1807.03225 L1355.27419,1807.03225 L1355.27419,1581.15322 L1468.2137,1581.15322 L1468.2137,1919.97177 L2.5243549e-29,1919.97177 L2.5243549e-29,0 L1468.2137,0 Z M1597.64239,581.310981 C1619.77853,559.174836 1655.46742,559.174836 1677.60356,581.310981 L1677.60356,581.310981 L1903.4826,807.190012 C1925.5058,829.213217 1925.5058,864.902104 1903.4826,887.038249 L1903.4826,887.038249 L1225.8455,1564.67534 C1215.22919,1575.17872 1200.88587,1581.16451 1185.86491,1581.16451 L1185.86491,1581.16451 L959.985883,1581.16451 C928.814576,1581.16451 903.516125,1555.86606 903.516125,1524.69475 L903.516125,1524.69475 L903.516125,1298.81572 C903.516125,1283.79477 909.501919,1269.45145 920.005294,1258.94807 L920.005294,1258.94807 Z M1442.35055,896.29929 L1016.45564,1322.1942 L1016.45564,1468.225 L1162.48643,1468.225 L1588.38135,1042.33008 L1442.35055,896.29929 Z M677.637094,1242.34597 L677.637094,1355.28548 L338.818547,1355.28548 L338.818547,1242.34597 L677.637094,1242.34597 Z M903.516125,1016.46693 L903.516125,1129.40645 L338.818547,1129.40645 L338.818547,1016.46693 L903.516125,1016.46693 Z M1637.62298,701.026867 L1522.19879,816.451052 L1668.22958,962.481846 L1783.65377,847.057661 L1637.62298,701.026867 Z M1129.39516,338.829841 L1129.39516,790.587903 L338.818547,790.587903 L338.818547,338.829841 L1129.39516,338.829841 Z M1016.45564,451.769356 L451.758062,451.769356 L451.758062,677.648388 L1016.45564,677.648388 L1016.45564,451.769356 Z" fill-rule="evenodd" stroke="none" stroke-width="1"></path></g></svg>';
const discussion_svg = '<svg class="canvasrefined-todo-svg" name="IconDiscussion" viewBox="0 0 1920 1920" rotate="0" aria-hidden="true" role="presentation" focusable="false" ><g role="presentation"><path d="M677.647059,16 L677.647059,354.936471 L790.588235,354.936471 L790.588235,129.054118 L1807.05882,129.054118 L1807.05882,919.529412 L1581.06353,919.529412 L1581.06353,1179.29412 L1321.41176,919.529412 L1242.24,919.529412 L1242.24,467.877647 L677.647059,467.877647 L0,467.877647 L0,1484.34824 L338.710588,1484.34824 L338.710588,1903.24706 L756.705882,1484.34824 L1242.24,1484.34824 L1242.24,1032.47059 L1274.99294,1032.47059 L1694.11765,1451.59529 L1694.11765,1032.47059 L1920,1032.47059 L1920,16 L677.647059,16 Z M338.789647,919.563294 L903.495529,919.563294 L903.495529,806.622118 L338.789647,806.622118 L338.789647,919.563294 Z M338.789647,1145.44565 L677.726118,1145.44565 L677.726118,1032.39153 L338.789647,1032.39153 L338.789647,1145.44565 Z M112.941176,580.705882 L1129.41176,580.705882 L1129.41176,1371.40706 L710.4,1371.40706 L451.651765,1631.05882 L451.651765,1371.40706 L112.941176,1371.40706 L112.941176,580.705882 Z" fill-rule="evenodd" stroke="none" stroke-width="1"></path></g></svg>';
const quiz_svg = '<svg class="canvasrefined-todo-svg" label="Quiz" name="IconQuiz" viewBox="0 0 1920 1920" rotate="0" aria-hidden="true" role="presentation" focusable="false" ><g role="presentation"><g fill-rule="evenodd" stroke="none" stroke-width="1"><path d="M746.255375,1466.76417 L826.739372,1547.47616 L577.99138,1796.11015 L497.507383,1715.51216 L746.255375,1466.76417 Z M580.35118,1300.92837 L660.949178,1381.52637 L329.323189,1713.15236 L248.725192,1632.55436 L580.35118,1300.92837 Z M414.503986,1135.20658 L495.101983,1215.80457 L80.5979973,1630.30856 L0,1549.71056 L414.503986,1135.20658 Z M1119.32036,264.600006 C1475.79835,-91.8779816 1844.58834,86.3040124 1848.35034,88.1280123 L1848.35034,88.1280123 L1865.45034,96.564012 L1873.88634,113.664011 C1875.71034,117.312011 2053.89233,486.101999 1697.30034,842.693987 L1697.30034,842.693987 L1550.69635,989.297982 L1548.07435,1655.17196 L1325.43235,1877.81395 L993.806366,1546.30196 L415.712386,968.207982 L84.0863971,636.467994 L306.72839,413.826001 L972.602367,411.318001 Z M1436.24035,1103.75398 L1074.40436,1465.70397 L1325.43235,1716.61796 L1434.30235,1607.74796 L1436.24035,1103.75398 Z M1779.26634,182.406009 C1710.18234,156.41401 1457.90035,87.1020124 1199.91836,345.198004 L1199.91836,345.198004 L576.90838,968.207982 L993.806366,1385.10597 L1616.70235,762.095989 C1873.65834,505.139998 1804.68834,250.920007 1779.26634,182.406009 Z M858.146371,525.773997 L354.152388,527.597997 L245.282392,636.467994 L496.310383,887.609985 L858.146371,525.773997 Z"></path><path d="M1534.98715,372.558003 C1483.91515,371.190003 1403.31715,385.326002 1321.69316,466.949999 L1281.22316,507.305998 L1454.61715,680.585992 L1494.97315,640.343994 C1577.16715,558.035996 1591.87315,479.033999 1589.82115,427.164001 L1587.65515,374.610003 L1534.98715,372.558003 Z"></path></g></g></svg>';
const announcement_svg = '<svg class="canvasrefined-todo-svg" label="Announcement" name="IconAnnouncement" viewBox="0 0 1920 1920" rotate="0" aria-hidden="true" role="presentation" focusable="false" ><g role="presentation"><path d="M1587.16235,31.2784941 C1598.68235,7.78672942 1624.43294,-4.41091764 1650.63529,1.46202354 C1676.16,7.56084707 1694.11765,30.2620235 1694.11765,56.4643765 L1694.11765,56.4643765 L1694.11765,570.459671 C1822.87059,596.662024 1920,710.732612 1920,847.052612 C1920,983.372612 1822.87059,1097.55614 1694.11765,1123.75849 L1694.11765,1123.75849 L1694.11765,1637.64085 C1694.11765,1663.8432 1676.16,1686.65732 1650.63529,1692.6432 C1646.23059,1693.65967 1641.93882,1694.11144 1637.64706,1694.11144 C1616.52706,1694.11144 1596.87529,1682.36555 1587.16235,1662.93967 C1379.23765,1247.2032 964.178824,1242.34673 960,1242.34673 L960,1242.34673 L564.705882,1242.34673 L564.705882,1807.05261 L652.461176,1807.05261 C640.602353,1716.92555 634.955294,1560.05026 715.934118,1456.37026 C768.338824,1389.2832 845.590588,1355.28791 945.882353,1355.28791 L945.882353,1355.28791 L945.882353,1468.22908 C881.392941,1468.22908 835.312941,1487.09026 805.044706,1525.71614 C736.263529,1613.58438 759.981176,1789.54673 774.776471,1849.97026 C778.955294,1866.79849 775.115294,1884.6432 764.498824,1898.30908 C753.769412,1911.97496 737.28,1919.99379 720,1919.99379 L720,1919.99379 L508.235294,1919.99379 C477.063529,1919.99379 451.764706,1894.80791 451.764706,1863.5232 L451.764706,1863.5232 L451.764706,1242.34673 L395.294118,1242.34673 C239.548235,1242.34673 112.941176,1115.73967 112.941176,959.993788 L112.941176,959.993788 L112.941176,903.5232 L56.4705882,903.5232 C25.2988235,903.5232 0,878.337318 0,847.052612 C0,815.880847 25.2988235,790.582024 56.4705882,790.582024 L56.4705882,790.582024 L112.941176,790.582024 L112.941176,734.111435 C112.941176,578.478494 239.548235,451.758494 395.294118,451.758494 L395.294118,451.758494 L959.887059,451.758494 C976.828235,451.645553 1380.36706,444.756141 1587.16235,31.2784941 Z M1581.17647,249.706729 C1386.46588,492.078494 1128.96,547.871435 1016.47059,560.746729 L1016.47059,560.746729 L1016.47059,1133.47144 C1128.96,1146.34673 1386.46588,1202.02673 1581.17647,1444.51144 L1581.17647,1444.51144 Z M903.529412,564.699671 L395.294118,564.699671 C301.891765,564.699671 225.882353,640.709082 225.882353,734.111435 L225.882353,734.111435 L225.882353,959.993788 C225.882353,1053.39614 301.891765,1129.40555 395.294118,1129.40555 L395.294118,1129.40555 L903.529412,1129.40555 L903.529412,564.699671 Z M1694.11765,688.144376 L1694.11765,1006.07379 C1759.73647,982.694965 1807.05882,920.577318 1807.05882,847.052612 C1807.05882,773.527906 1759.73647,711.5232 1694.11765,688.144376 L1694.11765,688.144376 Z" fill-rule="evenodd" stroke="none" stroke-width="1"></path></g></svg>';
const assignment_svg = '<svg class="canvasrefined-todo-svg" label="Assignment" name="IconAssignment" viewBox="0 0 1920 1920" rotate="0" aria-hidden="true" role="presentation" focusable="false"><g role="presentation"><path d="M1468.2137,0 L1468.2137,564.697578 L1355.27419,564.697578 L1355.27419,112.939516 L112.939516,112.939516 L112.939516,1807.03225 L1355.27419,1807.03225 L1355.27419,1581.15322 L1468.2137,1581.15322 L1468.2137,1919.97177 L2.5243549e-29,1919.97177 L2.5243549e-29,0 L1468.2137,0 Z M1597.64239,581.310981 C1619.77853,559.174836 1655.46742,559.174836 1677.60356,581.310981 L1677.60356,581.310981 L1903.4826,807.190012 C1925.5058,829.213217 1925.5058,864.902104 1903.4826,887.038249 L1903.4826,887.038249 L1225.8455,1564.67534 C1215.22919,1575.17872 1200.88587,1581.16451 1185.86491,1581.16451 L1185.86491,1581.16451 L959.985883,1581.16451 C928.814576,1581.16451 903.516125,1555.86606 903.516125,1524.69475 L903.516125,1524.69475 L903.516125,1298.81572 C903.516125,1283.79477 909.501919,1269.45145 920.005294,1258.94807 L920.005294,1258.94807 Z M1442.35055,896.29929 L1016.45564,1322.1942 L1016.45564,1468.225 L1162.48643,1468.225 L1588.38135,1042.33008 L1442.35055,896.29929 Z M677.637094,1242.34597 L677.637094,1355.28548 L338.818547,1355.28548 L338.818547,1242.34597 L677.637094,1242.34597 Z M903.516125,1016.46693 L903.516125,1129.40645 L338.818547,1129.40645 L338.818547,1016.46693 L903.516125,1016.46693 Z M1637.62298,701.026867 L1522.19879,816.451052 L1668.22958,962.481846 L1783.65377,847.057661 L1637.62298,701.026867 Z M1129.39516,338.829841 L1129.39516,790.587903 L338.818547,790.587903 L338.818547,338.829841 L1129.39516,338.829841 Z M1016.45564,451.769356 L451.758062,451.769356 L451.758062,677.648388 L1016.45564,677.648388 L1016.45564,451.769356 Z" fill-rule="evenodd" stroke="none" stroke-width="1"></path></g></svg>';
const x_svg = '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"></path><path d="M18 6l-12 12"></path><path d="M6 6l12 12"></path></svg>';
const check_svg = '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"></path><path d="M5 12l5 5l10 -10"></path></svg>';
const tag_svg = '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M7.5 7.5m-1 0a1 1 0 1 0 2 0a1 1 0 1 0 -2 0" /><path d="M3 6v5.172a2 2 0 0 0 .586 1.414l7.71 7.71a2.41 2.41 0 0 0 3.408 0l5.592 -5.592a2.41 2.41 0 0 0 0 -3.408l-7.71 -7.71a2 2 0 0 0 -1.414 -.586h-5.172a3 3 0 0 0 -3 3z" /></svg>';
@ -2671,8 +2671,8 @@ async function loadBetterTodo() {
const hr24 = options.todo_hr24;
const now = new Date();
//const csrfToken = CSRFtoken();
let todoAnnouncements = document.querySelector("#bettercanvas-announcement-list");
let todoAssignments = document.querySelector("#bettercanvas-todo-list");
let todoAnnouncements = document.querySelector("#canvasrefined-announcement-list");
let todoAssignments = document.querySelector("#canvasrefined-todo-list");
let assignmentsToInsert = [];
let announcementsToInsert = [];
@ -2706,42 +2706,42 @@ async function loadBetterTodo() {
if (filter === "todo" && ((itemState && itemState["rem"] === true) || (item.planner_override && item.planner_override.marked_complete === true))) return;
let listItemContainer = document.createElement("div");
listItemContainer.classList.add("bettercanvas-todo-container");
listItemContainer.innerHTML = '<div class="bettercanvas-hover-preview"><p class="bettercanvas-preview-title"></p><p class="bettercanvas-preview-text"></p></div><div class="bettercanvas-todo-actions"></div><div class="bettercanvas-todo-icon"></div><a class="bettercanvas-todo-item"><div class="bettercanvas-todo-item-header"></div></a><button class="bettercanvas-todo-actions-btn"><i class="icon-more bettercanvas-dots-icon" aria-hidden="true"></i></button>';
listItemContainer.querySelector(".bettercanvas-todo-item").href = item.html_url;
listItemContainer.classList.add("canvasrefined-todo-container");
listItemContainer.innerHTML = '<div class="canvasrefined-hover-preview"><p class="canvasrefined-preview-title"></p><p class="canvasrefined-preview-text"></p></div><div class="canvasrefined-todo-actions"></div><div class="canvasrefined-todo-icon"></div><a class="canvasrefined-todo-item"><div class="canvasrefined-todo-item-header"></div></a><button class="canvasrefined-todo-actions-btn"><i class="icon-more canvasrefined-dots-icon" aria-hidden="true"></i></button>';
listItemContainer.querySelector(".canvasrefined-todo-item").href = item.html_url;
listItemContainer.dataset.id = item.plannable_id;
listItemContainer.querySelector('.bettercanvas-todo-icon').innerHTML += svg;
listItemContainer.querySelector('.canvasrefined-todo-icon').innerHTML += svg;
let listItem = listItemContainer.querySelector(".bettercanvas-todo-item");
let listItem = listItemContainer.querySelector(".canvasrefined-todo-item");
const courseColor =
options.custom_cards_3?.[String(item.course_id)]?.color ??
options.custom_cards_3?.[item.course_id]?.color ??
options.custom_cards_3?.[item.plannable?.course_id]?.color ??
"#cccccc";
if (itemState?.["lbl"] && itemState["lbl"] !== "") {
makeElement("span", listItem.querySelector(".bettercanvas-todo-item-header"), { "className": "bettercanvas-todo-label", "textContent": itemState["lbl"] });
makeElement("span", listItem.querySelector(".canvasrefined-todo-item-header"), { "className": "canvasrefined-todo-label", "textContent": itemState["lbl"] });
}
if (itemState?.["crs"] === true) {
listItemContainer.querySelector(".bettercanvas-todo-item").style.textDecoration = "line-through";
listItemContainer.querySelector(".canvasrefined-todo-item").style.textDecoration = "line-through";
}
let title = makeElement("a", listItem.querySelector(".bettercanvas-todo-item-header"), { "className": "bettercanvas-todoitem-title", "textContent": item.plannable.title });
let title = makeElement("a", listItem.querySelector(".canvasrefined-todo-item-header"), { "className": "canvasrefined-todoitem-title", "textContent": item.plannable.title });
if (options.todo_hide_feedback === true) title.style = "color:" + courseColor + "!important;";
let course = makeElement("p", listItem, { "className": "bettercanvas-todoitem-course", "textContent": item.context_name });
let course = makeElement("p", listItem, { "className": "canvasrefined-todoitem-course", "textContent": item.context_name });
course.style.color = courseColor;
let format = formatTodoDate(date, item.submissions, hr24);
let todoDate = makeElement("p", listItem, { "className": "bettercanvas-todoitem-date", "textContent": format.date });
if (format.dueSoon) todoDate.classList.add("bettercanvas-due-soon");
let todoDate = makeElement("p", listItem, { "className": "canvasrefined-todoitem-date", "textContent": format.date });
if (format.dueSoon) todoDate.classList.add("canvasrefined-due-soon");
if (options.hover_preview === true) {
const customItem = item.planner_override && item.planner_override.custom && item.planner_override.custom === true;
listItem.addEventListener("mouseover", () => {
listItem.classList.add("bettercanvas-todo-hover");
let preview = listItemContainer.querySelector(".bettercanvas-hover-preview");
let previewTitle = preview.querySelector(".bettercanvas-preview-title");
let previewText = preview.querySelector(".bettercanvas-preview-text");
listItem.classList.add("canvasrefined-todo-hover");
let preview = listItemContainer.querySelector(".canvasrefined-hover-preview");
let previewTitle = preview.querySelector(".canvasrefined-preview-title");
let previewText = preview.querySelector(".canvasrefined-preview-text");
clearTimeout(delay);
delay = setTimeout(async () => {
if (listItem.classList.contains("bettercanvas-todo-hover")) {
if (listItem.classList.contains("canvasrefined-todo-hover")) {
previewTitle.textContent = item.plannable.title;
// custom assignment
if (customItem) {
@ -2783,38 +2783,38 @@ async function loadBetterTodo() {
});
listItem.addEventListener("mouseleave", () => {
listItem.classList.remove("bettercanvas-todo-hover");
listItemContainer.querySelector(".bettercanvas-hover-preview").style.display = "none";
listItem.classList.remove("canvasrefined-todo-hover");
listItemContainer.querySelector(".canvasrefined-hover-preview").style.display = "none";
});
}
const actions = listItemContainer.querySelector(".bettercanvas-todo-actions");
const actions = listItemContainer.querySelector(".canvasrefined-todo-actions");
let clickOutActions = (e) => {
if (e.target.className.includes("bettercanvas")) return;
if (e.target.className.includes("canvasrefined")) return;
document.body.removeEventListener("click", clickOutActions);
actions.style.display = "none";
}
listItemContainer.querySelector(".bettercanvas-todo-actions-btn").addEventListener("click", () => {
listItemContainer.querySelector(".canvasrefined-todo-actions-btn").addEventListener("click", () => {
actions.style.display = "block";
setTimeout(() => {
document.body.addEventListener("click", clickOutActions);
}, 100);
});
let removeBtn = makeElement("div", actions, { "className": "bettercanvas-todo-action", "textContent": "Remove" });
let removeBtn = makeElement("div", actions, { "className": "canvasrefined-todo-action", "textContent": "Remove" });
removeBtn.innerHTML += x_svg;
const dueAt = new Date(item.plannable_date).getTime();
let crossOffBtn = makeElement("div", actions, { "className": "bettercanvas-todo-action", "textContent": "Cross off" });
let crossOffBtn = makeElement("div", actions, { "className": "canvasrefined-todo-action", "textContent": "Cross off" });
crossOffBtn.innerHTML += check_svg;
crossOffBtn.addEventListener("click", () => {
setAssignmentState(item.plannable_id, { "crs": listItemContainer.querySelector(".bettercanvas-todo-item").style.textDecoration === "line-through" ? false : true, "expire": dueAt });
setAssignmentState(item.plannable_id, { "crs": listItemContainer.querySelector(".canvasrefined-todo-item").style.textDecoration === "line-through" ? false : true, "expire": dueAt });
});
let label = makeElement("span", actions, { "className": "bettercanvas-todo-action-tag", "textContent": "Label:" });
let label = makeElement("span", actions, { "className": "canvasrefined-todo-action-tag", "textContent": "Label:" });
label.innerHTML += tag_svg;
let labelInput = makeElement("input", actions, { "className": "bettercanvas-todo-input", "type": "text", "placeholder": "Label", "value": itemState && itemState["lbl"] ? itemState["lbl"] : "" });
let labelInput = makeElement("input", actions, { "className": "canvasrefined-todo-input", "type": "text", "placeholder": "Label", "value": itemState && itemState["lbl"] ? itemState["lbl"] : "" });
labelInput.addEventListener("change", (e) => {
setAssignmentState(item.plannable_id, { "lbl": e.target.value, "expire": dueAt });
});
@ -2867,7 +2867,7 @@ async function loadBetterTodo() {
});
/*
// remove item button
listItemContainer.querySelector(".bettercanvas-todo-complete-btn").addEventListener('click', function () {
listItemContainer.querySelector(".canvasrefined-todo-complete-btn").addEventListener('click', function () {
if (item.planner_override && item.planner_override.custom && item.planner_override.custom === true) {
// set item as complete locally
chrome.storage.sync.get("custom_assignments_overflow", overflow => {
@ -2921,7 +2921,7 @@ async function loadBetterTodo() {
} else {
assignmentsToInsert.push(listItemContainer);
if (item.submissions && item.submissions.submitted) {
listItemContainer.classList.add("bettercanvas-todo-item-completed");
listItemContainer.classList.add("canvasrefined-todo-item-completed");
}
}
//}
@ -2939,7 +2939,7 @@ async function loadBetterTodo() {
}
if (i !== assignmentsToInsert.length) createTodoViewMore(todoAssignments, "assignment");
} else {
makeElement("p", todoAssignments, { "className": "bettercanvas-none-due", "textContent": "None" });
makeElement("p", todoAssignments, { "className": "canvasrefined-none-due", "textContent": "None" });
}
// appending announcements all at once
@ -2951,7 +2951,7 @@ async function loadBetterTodo() {
}
if (i !== -1) createTodoViewMore(todoAnnouncements, "announcement");
} else {
makeElement("p", todoAnnouncements, { "className": "bettercanvas-none-due", "textContent": "None" });
makeElement("p", todoAnnouncements, { "className": "canvasrefined-none-due", "textContent": "None" });
}
cleanCustomAssignments();
@ -3081,26 +3081,26 @@ function toggleDarkMode() {
style.textContent = css;
document.documentElement.append(style);
style.id = 'darkcss';
style.className = "bettercanvas-darkmode-enabled";
style.className = "canvasrefined-darkmode-enabled";
darkStyleInserted = true;
} else if (darkStyleInserted) {
let style = document.querySelector("#darkcss");
style.textContent = options.dark_mode === true || options.device_dark ? css : "";
style.className = options.dark_mode === true || options.device_dark ? "bettercanvas-darkmode-enabled" : "";
style.className = options.dark_mode === true || options.device_dark ? "canvasrefined-darkmode-enabled" : "";
}
/*
if (options.dark_mode === true || options.device_dark) {
document.body.classList.add("bettercanvas--darkmode--enabled");
document.body.classList.add("canvasrefined--darkmode--enabled");
} else {
document.body.classList.remove("bettercanvas--darkmode--enabled");
document.body.classList.remove("canvasrefined--darkmode--enabled");
}
*/
runiframeChecker();
}
function runDarkModeFixer(override = false) {
if (options.dark_mode !== true) return { "path": "bettercanvas-darkmode_off", "time": "" };
if (override === false && !options["dark_mode_fix"].includes(window.location.pathname)) return { "path": "bettercanvas-none", "time": "" };
if (options.dark_mode !== true) return { "path": "canvasrefined-darkmode_off", "time": "" };
if (override === false && !options["dark_mode_fix"].includes(window.location.pathname)) return { "path": "canvasrefined-none", "time": "" };
let output = inspectDarkMode();
return { "path": window.location.pathname, "time": output.time };
}
@ -3137,7 +3137,7 @@ function autoDarkModeCheck() {
// if (options.scheduledReminderTime) {
// let [hour, minute] = options.scheduledReminderTime.split(":");
// if (parseInt(hour) == currentHour && parseInt(minute) == currentMinute) {
// const container = document.getElementById("bettercanvas-reminders") || makeElement("div", document.body, { "id": "bettercanvas-reminders" });
// const container = document.getElementById("canvasrefined-reminders") || makeElement("div", document.body, { "id": "canvasrefined-reminders" });
// container.style.display = "flex";
// container.textContent = "";
// const storage = await chrome.storage.sync.get("reminders");
@ -3175,7 +3175,7 @@ function runiframeChecker() {
document.querySelectorAll('iframe').forEach((frame) => {
if (frame.contentDocument && frame.contentDocument.documentElement && frame.contentDocument.documentElement.querySelector('#darkcss')) {
frame.contentDocument.documentElement.querySelector('#darkcss').textContent = '';
frame.contentDocument.body.classList.remove("bettercanvas--darkmode--enabled");
frame.contentDocument.body.classList.remove("canvasrefined--darkmode--enabled");
}
});
return;
@ -3188,7 +3188,7 @@ function runiframeChecker() {
const new_style_element = document.createElement("style");
new_style_element.textContent = generateDarkModeCSS();
new_style_element.id = "darkcss";
frame.contentDocument.body.classList.add("bettercanvas--darkmode--enabled");
frame.contentDocument.body.classList.add("canvasrefined--darkmode--enabled");
frame.contentDocument.documentElement.prepend(new_style_element);
}
}
@ -3215,11 +3215,11 @@ function insertGrades() {
let gradepercent = grade.enrollments[0].has_grading_periods === true ? grade.enrollments[0].current_period_computed_current_score : grade.enrollments[0].computed_current_score;
//let gradepercent = grade.enrollments[0].computed_current_score;
let percent = (gradepercent || "--") + "%";
let gradeContainer = cards[i].querySelector(".bettercanvas-card-grade") || makeElement("a", cards[i].querySelector(".ic-DashboardCard__header"), { "className": "bettercanvas-card-grade", "textContent": percent });
let gradeContainer = cards[i].querySelector(".canvasrefined-card-grade") || makeElement("a", cards[i].querySelector(".ic-DashboardCard__header"), { "className": "canvasrefined-card-grade", "textContent": percent });
if (options.grade_hover === true) {
gradeContainer.classList.add("bettercanvas-hover-only");
gradeContainer.classList.add("canvasrefined-hover-only");
} else {
gradeContainer.classList.remove("bettercanvas-hover-only");
gradeContainer.classList.remove("canvasrefined-hover-only");
}
gradeContainer.setAttribute("href", `${domain}/courses/${course_id}/grades`);
gradeContainer.style.display = "block";
@ -3232,7 +3232,7 @@ function insertGrades() {
}
});
} else {
document.querySelectorAll('.bettercanvas-card-grade').forEach(grade => {
document.querySelectorAll('.canvasrefined-card-grade').forEach(grade => {
grade.style.display = "none";
});
}
@ -3257,20 +3257,20 @@ function setAssignmentStatus(id, status, assignments_done = []) {
function createCardAssignment(assignment) {
let assignmentContainer = document.createElement("div");
assignmentContainer.className = "bettercanvas-assignment-container";
let assignmentName = makeElement("a", assignmentContainer, { "className": "bettercanvas-assignment-link", "textContent": assignment.plannable.title, "href": assignment.html_url });
let assignmentDueAt = makeElement("span", assignmentContainer, { "className": "bettercanvas-assignment-dueat", "textContent": formatCardDue(new Date(assignment.plannable_date)) });
if (assignment.overdue === true) assignmentDueAt.classList.add("bettercanvas-assignment-overdue");
assignmentContainer.className = "canvasrefined-assignment-container";
let assignmentName = makeElement("a", assignmentContainer, { "className": "canvasrefined-assignment-link", "textContent": assignment.plannable.title, "href": assignment.html_url });
let assignmentDueAt = makeElement("span", assignmentContainer, { "className": "canvasrefined-assignment-dueat", "textContent": formatCardDue(new Date(assignment.plannable_date)) });
if (assignment.overdue === true) assignmentDueAt.classList.add("canvasrefined-assignment-overdue");
if (assignment?.submissions?.submitted === true) {
assignmentContainer.classList.add("bettercanvas-completed");
assignmentContainer.classList.add("canvasrefined-completed");
} else {
if (options.assignment_states[assignment.plannable_id]?.["crs"] === true) {
assignmentContainer.classList.add("bettercanvas-completed");
assignmentContainer.classList.add("canvasrefined-completed");
}
}
assignmentDueAt.addEventListener('mouseup', function () {
assignmentContainer.classList.toggle("bettercanvas-completed");
const status = assignmentContainer.classList.contains("bettercanvas-completed");
assignmentContainer.classList.toggle("canvasrefined-completed");
const status = assignmentContainer.classList.contains("canvasrefined-completed");
setAssignmentState(assignment.plannable_id, { "crs": status, "expire": assignment.plannable_date });
});
return assignmentContainer;
@ -3307,7 +3307,7 @@ function preloadAssignmentEls() {
function loadCardAssignments() {
if (options.assignments_due !== true) {
document.querySelectorAll(".bettercanvas-card-assignment").forEach(card => {
document.querySelectorAll(".canvasrefined-card-assignment").forEach(card => {
card.style.display = "none";
});
return;
@ -3324,7 +3324,7 @@ function loadCardAssignments() {
let link = card.querySelector(".ic-DashboardCard__link");
if (!link) return;
let course_id = link.href.split("courses/")[1];
let cardContainer = card.querySelector('.bettercanvas-card-container');
let cardContainer = card.querySelector('.canvasrefined-card-container');
if (!cardContainer) return;
cardContainer.textContent = "";
if (cardContainer.parentElement) {
@ -3338,15 +3338,15 @@ function loadCardAssignments() {
if ((options.card_overdues !== true && now >= assignment.due) || (options.card_overdues === true && assignment.submitted === true)) return;
if (assignment.type !== "assignment" && assignment.type !== "quiz" && assignment.type !== "discussion_topic") return;
if (assignment.override === true) return;
//assignment.el.querySelector(".bettercanvas-assignment-dueat").textContent = formatCardDue(assignment.due);
//assignment.el.querySelector(".canvasrefined-assignment-dueat").textContent = formatCardDue(assignment.due);
cardContainer.appendChild(assignment.el);
count++;
});
}
if (count === 0) {
let assignmentContainer = makeElement("div", cardContainer, { "className": "bettercanvas-assignment-container" });
let assignmentDivLink = makeElement("a", assignmentContainer, { "className": "bettercanvas-assignment-link", "textContent": "None" });
let assignmentContainer = makeElement("div", cardContainer, { "className": "canvasrefined-assignment-container" });
let assignmentDivLink = makeElement("a", assignmentContainer, { "className": "canvasrefined-assignment-link", "textContent": "None" });
}
});
} catch (e) {
@ -3368,7 +3368,7 @@ function loadCardAssignments2(c = null) {
cards.forEach(card => {
let count = 0;
let course_id = parseInt(card.querySelector(".ic-DashboardCard__link").href.split("courses/")[1]);
let cardContainer = card.querySelector('.bettercanvas-card-container');
let cardContainer = card.querySelector('.canvasrefined-card-container');
cardContainer.textContent = "";
cardContainer.parentElement.style.display = "block";
@ -3393,8 +3393,8 @@ function loadCardAssignments2(c = null) {
});
if (count === 0) {
let assignmentContainer = makeElement("div", "bettercanvas-assignment-container", cardContainer);
let assignmentDivLink = makeElement("a", "bettercanvas-assignment-link", assignmentContainer, "None");
let assignmentContainer = makeElement("div", "canvasrefined-assignment-container", cardContainer);
let assignmentDivLink = makeElement("a", "canvasrefined-assignment-link", assignmentContainer, "None");
}
});
});
@ -3402,7 +3402,7 @@ function loadCardAssignments2(c = null) {
logError(e);
}
} else {
document.querySelectorAll(".bettercanvas-card-assignment").forEach(card => {
document.querySelectorAll(".canvasrefined-card-assignment").forEach(card => {
card.style.display = "none";
});
}
@ -3412,14 +3412,14 @@ function loadCardAssignments2(c = null) {
function setupCardAssignments() {
if (options.assignments_due !== true) return;
try {
if (document.querySelectorAll('.ic-DashboardCard').length > 0 && document.querySelectorAll('.bettercanvas-card-container').length > 0) return;
if (document.querySelectorAll('.ic-DashboardCard').length > 0 && document.querySelectorAll('.canvasrefined-card-container').length > 0) return;
let cards = document.querySelectorAll('.ic-DashboardCard');
cards.forEach(card => {
let assignmentContainer = card.querySelector(".bettercanvas-card-assignment") || makeElement("div", card, { "className": "bettercanvas-card-assignment" });
let assignmentsDueHeader = card.querySelector(".bettercanvas-card-header-container") || makeElement("div", assignmentContainer, { "className": "bettercanvas-card-header-container" });
let assignmentsDueLabel = card.querySelector(".bettercanvas-card-header") || makeElement("h3", assignmentsDueHeader, { "className": "bettercanvas-card-header", "textContent": chrome.i18n.getMessage("due") });
let cardContainer = card.querySelector(".bettercanvas-card-container") || makeElement("div", assignmentContainer, { "className": "bettercanvas-card-container" });
let skeletonText = card.querySelector(".bettercanvas-skeleton-text") || makeElement("div", cardContainer, { "className": "bettercanvas-skeleton-text" });
let assignmentContainer = card.querySelector(".canvasrefined-card-assignment") || makeElement("div", card, { "className": "canvasrefined-card-assignment" });
let assignmentsDueHeader = card.querySelector(".canvasrefined-card-header-container") || makeElement("div", assignmentContainer, { "className": "canvasrefined-card-header-container" });
let assignmentsDueLabel = card.querySelector(".canvasrefined-card-header") || makeElement("h3", assignmentsDueHeader, { "className": "canvasrefined-card-header", "textContent": chrome.i18n.getMessage("due") });
let cardContainer = card.querySelector(".canvasrefined-card-container") || makeElement("div", assignmentContainer, { "className": "canvasrefined-card-container" });
let skeletonText = card.querySelector(".canvasrefined-skeleton-text") || makeElement("div", cardContainer, { "className": "canvasrefined-skeleton-text" });
});
} catch (e) {
logError(e);
@ -3494,7 +3494,7 @@ function customizeCards(c = null) {
}
links = card.querySelectorAll(".ic-DashboardCard__action");
for (let i = 0; i < 4; i++) {
let img = links[i].querySelector(".bettercanvas-link-image") || makeElement("img", links[i], { "className": "bettercanvas-link-image" });
let img = links[i].querySelector(".canvasrefined-link-image") || makeElement("img", links[i], { "className": "canvasrefined-link-image" });
links[i].style.display = "inherit";
if (cardOptions_2.links[i].path === "none") {
links[i].style.display = "none";
@ -3541,10 +3541,10 @@ GPA calculator
function calculateGPA2() {
let qualityPoints = 0, numCredits = 0, weightedQualityPoints = 0, cumulativePoints = 0, cumulativeCredits = 0;
document.querySelectorAll('.bettercanvas-gpa-course').forEach(course => {
const weight = course.querySelector('.bettercanvas-course-weight').value;
const credits = parseFloat(course.querySelector('.bettercanvas-course-credit').value);
const grade = parseFloat(course.querySelector('.bettercanvas-course-percent').value);
document.querySelectorAll('.canvasrefined-gpa-course').forEach(course => {
const weight = course.querySelector('.canvasrefined-course-weight').value;
const credits = parseFloat(course.querySelector('.canvasrefined-course-credit').value);
const grade = parseFloat(course.querySelector('.canvasrefined-course-percent').value);
if (weight === "dnc" || !credits || !grade) return;
let letter = "--";
let gpa;
@ -3596,7 +3596,7 @@ function calculateGPA2() {
cumulativeCredits = credits;
} else {
*/
course.querySelector(".bettercanvas-gpa-letter-grade").textContent = letter;
course.querySelector(".canvasrefined-gpa-letter-grade").textContent = letter;
let weightMultiplier = 0;
if (weight === "ap") {
@ -3613,12 +3613,12 @@ function calculateGPA2() {
});
document.querySelector("#bettercanvas-gpa-unweighted").textContent = (qualityPoints / numCredits).toFixed(2);
document.querySelector("#bettercanvas-gpa-weighted").textContent = (weightedQualityPoints / numCredits).toFixed(2);
const cGPA = document.querySelector("#bettercanvas-cumulative-gpa");
const g = parseFloat(cGPA.querySelector(".bettercanvas-course-percent").value);
const c = parseInt(cGPA.querySelector(".bettercanvas-course-credit").value);
document.querySelector("#bettercanvas-gpa-cumulative").textContent = (((options.gpa_calc_weighted === true ? weightedQualityPoints : qualityPoints) + (g * c)) / (numCredits + c)).toFixed(2);
document.querySelector("#canvasrefined-gpa-unweighted").textContent = (qualityPoints / numCredits).toFixed(2);
document.querySelector("#canvasrefined-gpa-weighted").textContent = (weightedQualityPoints / numCredits).toFixed(2);
const cGPA = document.querySelector("#canvasrefined-cumulative-gpa");
const g = parseFloat(cGPA.querySelector(".canvasrefined-course-percent").value);
const c = parseInt(cGPA.querySelector(".canvasrefined-course-credit").value);
document.querySelector("#canvasrefined-gpa-cumulative").textContent = (((options.gpa_calc_weighted === true ? weightedQualityPoints : qualityPoints) + (g * c)) / (numCredits + c)).toFixed(2);
}
function changeGPASettings(course_id, update) {
@ -3647,15 +3647,15 @@ function createGPACalcCourse(location, course) {
}
if (customs.hidden === true) return;
let courseContainer = makeElement("div", location, { "className": course.id === "cumulative" ? "bettercanvas-gpa-cumulative" : "bettercanvas-gpa-course", "innerHTML": '<div class="bettercanvas-gpa-letter-grade"></div>' });
let courseName = makeElement("p", courseContainer, { "className": "bettercanvas-gpa-name", "textContent": customs.name === "" ? course.course_code : customs.name });
let changerContainer = makeElement("div", courseContainer, { "className": "bettercanvas-gpa-percent-container" });
let courseContainer = makeElement("div", location, { "className": course.id === "cumulative" ? "canvasrefined-gpa-cumulative" : "canvasrefined-gpa-course", "innerHTML": '<div class="canvasrefined-gpa-letter-grade"></div>' });
let courseName = makeElement("p", courseContainer, { "className": "canvasrefined-gpa-name", "textContent": customs.name === "" ? course.course_code : customs.name });
let changerContainer = makeElement("div", courseContainer, { "className": "canvasrefined-gpa-percent-container" });
let credits = makeElement("div", courseContainer, { "className": "bettercanvas-course-credits", "innerHTML": '<input class="bettercanvas-course-credit" value="1"></input><span class="bettercanvas-course-percent-sign">cr</span>' });
let creditsChanger = credits.querySelector(".bettercanvas-course-credit");
let credits = makeElement("div", courseContainer, { "className": "canvasrefined-course-credits", "innerHTML": '<input class="canvasrefined-course-credit" value="1"></input><span class="canvasrefined-course-percent-sign">cr</span>' });
let creditsChanger = credits.querySelector(".canvasrefined-course-credit");
creditsChanger.value = customs.credits;
let changer = makeElement("input", changerContainer, { "className": "bettercanvas-course-percent" });
let percent = makeElement("span", changerContainer, { "className": "bettercanvas-course-percent-sign", "textContent": course.id === "cumulative" ? "/4" : "%" });
let changer = makeElement("input", changerContainer, { "className": "canvasrefined-course-percent" });
let percent = makeElement("span", changerContainer, { "className": "canvasrefined-course-percent-sign", "textContent": course.id === "cumulative" ? "/4" : "%" });
let courseGrade = course?.enrollments[0].has_grading_periods === true ? course.enrollments[0].current_period_computed_current_score : course.enrollments[0].computed_current_score;
if (customs["gr"] !== null) {
@ -3667,14 +3667,14 @@ function createGPACalcCourse(location, course) {
}
if (course.id !== "cumulative") {
let weightSelections = makeElement("form", courseContainer, { "className": "bettercanvas-course-weights" });
weightSelections.innerHTML = '<select name="weight-selection" class="bettercanvas-course-weight"><option value="dnc">Do not count</option><option value="regular">Regular/College</option><option value="honors">Honors</option><option value="ap">AP/IB</option></select>';
let weightChanger = weightSelections.querySelector(".bettercanvas-course-weight");
let weightSelections = makeElement("form", courseContainer, { "className": "canvasrefined-course-weights" });
weightSelections.innerHTML = '<select name="weight-selection" class="canvasrefined-course-weight"><option value="dnc">Do not count</option><option value="regular">Regular/College</option><option value="honors">Honors</option><option value="ap">AP/IB</option></select>';
let weightChanger = weightSelections.querySelector(".canvasrefined-course-weight");
weightChanger.value = changer.value === "--" ? "dnc" : customs.weight;
weightChanger.addEventListener('change', () => changeGPASettings(course.id, { "weight": weightSelections.querySelector(".bettercanvas-course-weight").value }));
weightChanger.addEventListener('change', () => changeGPASettings(course.id, { "weight": weightSelections.querySelector(".canvasrefined-course-weight").value }));
let useCustomGr = makeElement("input", courseContainer, { "className": "bettercanvas-course-customgr", "type": "checkbox", "checked": customs.gr !== null ? true : false });
let useCustomGrLabel = makeElement("span", courseContainer, { "className": "bettercanvas-course-customgr-label", "textContent": "Save custom grade" });
let useCustomGr = makeElement("input", courseContainer, { "className": "canvasrefined-course-customgr", "type": "checkbox", "checked": customs.gr !== null ? true : false });
let useCustomGrLabel = makeElement("span", courseContainer, { "className": "canvasrefined-course-customgr-label", "textContent": "Save custom grade" });
useCustomGr.addEventListener("input", () => {
if (options["custom_cards"][course.id]) {
if (options["custom_cards"][course.id]["gr"] !== undefined && options["custom_cards"][course.id]["gr"] !== null) {
@ -3695,7 +3695,7 @@ function createGPACalcCourse(location, course) {
}
});
credits.querySelector(".bettercanvas-course-credit").addEventListener('input', () => changeGPASettings(course.id, { "credits": credits.querySelector(".bettercanvas-course-credit").value }));
credits.querySelector(".canvasrefined-course-credit").addEventListener('input', () => changeGPASettings(course.id, { "credits": credits.querySelector(".canvasrefined-course-credit").value }));
return courseContainer;
}
@ -3706,16 +3706,16 @@ function setupGPACalc() {
if (!document.querySelector(".ic-DashboardCard__box__container")) return;
let container2 = document.querySelector(".bettercanvas-gpa-card") || document.createElement("div");
container2.className = "bettercanvas-gpa-card";
let container2 = document.querySelector(".canvasrefined-gpa-card") || document.createElement("div");
container2.className = "canvasrefined-gpa-card";
container2.style.display = options.gpa_calc === true ? "inline-block" : "none";
container2.innerHTML = `<h3 class="bettercanvas-gpa-header">GPA</h3><div><div><p id="bettercanvas-gpa-unweighted"></p><p>Current</p></div><div style="display:${options["gpa_calc_weighted"] ? "block" : "none"}"><p id="bettercanvas-gpa-weighted"></p><p>Weighted</p></div><div style="display:${options["gpa_calc_cumulative"] ? "block" : "none"}"><p id="bettercanvas-gpa-cumulative"></p><p>Cumulative</p></div></div>`;
let editBtn = makeElement("button", container2, { "className": "bettercanvas-gpa-edit-btn", "textContent": "Edit Calculator" });
container2.innerHTML = `<h3 class="canvasrefined-gpa-header">GPA</h3><div><div><p id="canvasrefined-gpa-unweighted"></p><p>Current</p></div><div style="display:${options["gpa_calc_weighted"] ? "block" : "none"}"><p id="canvasrefined-gpa-weighted"></p><p>Weighted</p></div><div style="display:${options["gpa_calc_cumulative"] ? "block" : "none"}"><p id="canvasrefined-gpa-cumulative"></p><p>Cumulative</p></div></div>`;
let editBtn = makeElement("button", container2, { "className": "canvasrefined-gpa-edit-btn", "textContent": "Edit Calculator" });
let container = document.querySelector(".bettercanvas-gpa") || document.createElement("div");
container.className = "bettercanvas-gpa";
container.innerHTML = '<h3 class="bettercanvas-gpa-header">GPA Calculator</h3><div class="bettercanvas-gpa-courses-container"><div class="bettercanvas-gpa-courses"></div></div>';
let container = document.querySelector(".canvasrefined-gpa") || document.createElement("div");
container.className = "canvasrefined-gpa";
container.innerHTML = '<h3 class="canvasrefined-gpa-header">GPA Calculator</h3><div class="canvasrefined-gpa-courses-container"><div class="canvasrefined-gpa-courses"></div></div>';
if (options.gpa_calc_prepend === true) {
document.querySelector(".ic-DashboardCard__box__container").prepend(container2);
@ -3725,9 +3725,9 @@ function setupGPACalc() {
document.querySelector(".ic-DashboardCard__box__container").appendChild(container);
}
let location = document.querySelector(".bettercanvas-gpa-courses");
let location = document.querySelector(".canvasrefined-gpa-courses");
let cumulative = createGPACalcCourse(location, { "id": "cumulative", "enrollments": [{ "has_grading_periods": true, "current_period_computed_current_score": 0 }] });
cumulative.id = "bettercanvas-cumulative-gpa";
cumulative.id = "canvasrefined-cumulative-gpa";
result.forEach(course => createGPACalcCourse(location, course));
container.style.display = "none";
@ -3763,8 +3763,8 @@ function delayDashboardNotesStorage(text) {
function loadDashboardNotes() {
if (options.dashboard_notes === true) {
let notes = document.querySelector('.bettercanvas-dashboard-notes') || document.createElement("textarea");
notes.classList.add("bettercanvas-dashboard-notes");
let notes = document.querySelector('.canvasrefined-dashboard-notes') || document.createElement("textarea");
notes.classList.add("canvasrefined-dashboard-notes");
notes.value = options.dashboard_notes_text;
notes.placeholder = "Enter notes here";
notes.style.display = "block";
@ -3776,7 +3776,7 @@ function loadDashboardNotes() {
this.style.height = this.scrollHeight + 5 + "px";
});
} else {
let notes = document.querySelector('.bettercanvas-dashboard-notes');
let notes = document.querySelector('.canvasrefined-dashboard-notes');
if (notes) notes.style.display = "none";
}
}
@ -3826,8 +3826,8 @@ Smaller features
*/
function applyAestheticChanges() {
let style = document.querySelector("#bettercanvas-aesthetics") || document.createElement('style');
style.id = "bettercanvas-aesthetics";
let style = document.querySelector("#canvasrefined-aesthetics") || document.createElement('style');
style.id = "canvasrefined-aesthetics";
style.textContent = "";
if (options.condensed_cards === true) style.textContent += ".ic-DashboardCard__header_hero {height:60px!important}.ic-DashboardCard__header-subtitle, .ic-DashboardCard__header-term{display:none}";
if (options.remlogo === true) style.textContent += ".ic-app-header__logomark-container{display:none}";
@ -3887,7 +3887,7 @@ function showUpdateMsg() {
if (!el) return;
// option off or div already created
let div = document.getElementById("bettercanvas-update-msg");
let div = document.getElementById("canvasrefined-update-msg");
if (options.show_updates !== true || options.update_msg === "") {
if (div) div.style.display = "none";
return;
@ -3897,9 +3897,9 @@ function showUpdateMsg() {
}
// first creation
div = makeElement("div", el, { "id": "bettercanvas-update-msg" });
div = makeElement("div", el, { "id": "canvasrefined-update-msg" });
makeElement("p", div, { "textContent": options.update_msg });
const close = makeElement("button", div, { "id": "bettercanvas-update-close", "textContent": "Close" });
const close = makeElement("button", div, { "id": "canvasrefined-update-close", "textContent": "Close" });
close.addEventListener("click", () => {
readUpdate();
div.remove();
@ -3954,15 +3954,15 @@ function setupCustomURL() {
if (res.length) {
getCards(res).then(() => {
setTimeout(() => {
console.log("Better Canvas - setting custom domain to " + domain);
console.log("Canvas Refined - setting custom domain to " + domain);
chrome.storage.sync.set({ custom_domain: [domain] }).then(location.reload());
}, 100);
});
} else {
console.log("Better Canvas - this url doesn't seem to be a canvas url (1)");
console.log("Canvas Refined - this url doesn't seem to be a canvas url (1)");
}
}).catch(err => {
console.log("Better Canvas - this url doesn't seem to be a canvas url (2)");
console.log("Canvas Refined - this url doesn't seem to be a canvas url (2)");
});
}

View File

@ -33,7 +33,7 @@ const localSwitches = [];
const fontsDropdownStateKey = "fonts_dropdown_open";
//const apiurl = "http://localhost:3000";
const apiurl = "https://bettercanvas.diditupe.dev";
const apiurl = "https://canvasrefined.diditupe.dev";
const defaultOptions = {
"local": {
@ -509,7 +509,7 @@ function setup() {
// activate dark mode fixer button
document.querySelector("#fix-dm-btn").addEventListener("click", async function () {
let output = await sendFromPopup("fixdm");
if (output.path === "bettercanvas-none" || output.path === "bettercanvas-darkmode_off") return;
if (output.path === "canvasrefined-none" || output.path === "canvasrefined-darkmode_off") return;
let rating = "bad";
if (output.time < 100) {
rating = "good";
@ -1361,7 +1361,7 @@ async function displayThemeListNew(direction) { // TODO: remake
console.log(e);
current_page_num = 1;
fallback = true;
displayAlert(true, "There was a problem getting themes from the Better Canvas server, so the old themes browser is being displayed for now.");
displayAlert(true, "there is no server you should not be seeing this. There was a problem getting themes from the Canvas Refined server, so the old themes browser is being displayed for now.");
displayThemeListOld(0);
return;
}

View File

@ -285,7 +285,7 @@ const themes = [
{ "color": "white", "score": 4430, "title": "Leclerc by Kayleigh", "exports": { "disable_color_overlay": true, "gradient_cards": false, "dark_mode": true, "dark_preset": { "background-0": "#ffffff", "background-1": "#fffafa", "background-2": "#ffffff", "borders": "#a30000", "links": "#a30000", "sidebar": "#ffffff", "sidebar-text": "#e60000", "text-0": "#bd0000", "text-1": "#c20000", "text-2": "#a80000" }, "custom_cards": ["https://i.pinimg.com/564x/d8/c6/8f/d8c68f6ee67256cb7c46f96a33883aab.jpg", "https://i.pinimg.com/236x/2d/85/e2/2d85e266a25fecdd2b5e10f0c96f7421.jpg", "https://i.pinimg.com/736x/2d/90/69/2d906970b97b1d6c94d47684107b1751.jpg", "https://i.pinimg.com/736x/7c/5a/28/7c5a28afb3acabe3020da0724b949369.jpg", "https://i.pinimg.com/474x/01/85/3e/01853e96a0aee5316d08f17153b150c0.jpg", "https://i.pinimg.com/474x/ff/1b/2f/ff1b2f3094c84981613572c77a257c5f.jpg", "https://i.pinimg.com/236x/6f/2f/96/6f2f9633aca5477ea306cb9373f65c8a.jpg", "https://i.pinimg.com/236x/dd/bf/93/ddbf933fba66984d5e4248652e69274b.jpg", "https://i.pinimg.com/236x/7d/f1/59/7df159326b295cde1782fdc0ad29cbc2.jpg", "https://i.pinimg.com/236x/4e/70/98/4e7098f66610408430a1bf286c11ca97.jpg", "https://i.pinimg.com/236x/a8/09/63/a809638bc7da39d75ff8f585ef80a741.jpg", "https://i.pinimg.com/736x/ef/7c/63/ef7c63a881ec9b48ad243863f7acf6e0.jpg", "https://i.pinimg.com/736x/58/61/7c/58617c8d4eb208cf98ecc3ed415e87ab.jpg", "https://i.pinimg.com/236x/aa/d4/a3/aad4a3f2919d4fb97cfcec9780981e7a.jpg", "https://i.pinimg.com/564x/f6/88/1c/f6881c7c3cdc357ecfcf58f8bfb5c75c.jpg", "https://i.pinimg.com/236x/a6/f8/9e/a6f89e4ab75df93454bb68e39f29bec5.jpg", "https://i.pinimg.com/236x/2a/71/f9/2a71f9d785aecfc40203e69cc0309767.jpg", "https://i.pinimg.com/736x/6e/9e/66/6e9e66905ceaf91b01e14fc57c6ec643.jpg", "https://i.pinimg.com/736x/0e/98/75/0e98752cbf7b1594b1a30326e8911b3f.jpg", "https://i.pinimg.com/736x/0c/65/dd/0c65dde4494abfd4f477569855d1085e.jpg", "https://i.pinimg.com/236x/3c/7e/5f/3c7e5fb2c2605b34ab795a825c97e8de.jpg"], "card_colors": ["#d60000"], "custom_font": { "family": "'Playfair Display'", "link": "Playfair+Display:wght@400;700" } }, "preview": "https://i.pinimg.com/236x/4e/70/98/4e7098f66610408430a1bf286c11ca97.jpg" },
{ "color": "blue", "score": 2220, "title": "GreysAnatomy by Emberli", "exports": { "disable_color_overlay": true, "gradient_cards": false, "dark_mode": true, "dark_preset": { "background-0": "#4a71fc", "background-1": "#080821", "background-2": "#080821", "borders": "#f7f7f8", "links": "#121131", "sidebar": "#080821", "sidebar-text": "#fcfcfd", "text-0": "#fcfcfc", "text-1": "#ffffff", "text-2": "#fafafa" }, "custom_cards": ["https://i.pinimg.com/564x/98/4b/ea/984beac6a1c618358560e08d237c10ff.jpg", "https://i.pinimg.com/564x/5e/92/f7/5e92f7aaf90b3283725b5ea64bf229a4.jpg", "https://i.pinimg.com/564x/fd/60/e2/fd60e2c0e20c854d3a23d53674cd2792.jpg", "https://i.pinimg.com/564x/0d/67/b6/0d67b612c91d3b2a1655827fb2c34e85.jpg", "https://i.pinimg.com/564x/5c/cd/5b/5ccd5b37d890a333f76d9622855249c7.jpg", "https://i.pinimg.com/564x/66/23/14/662314b9e24dd7f024c00f5dbae61d12.jpg", "https://i.pinimg.com/564x/d9/87/76/d987760a478c0112d4110cdc904d2345.jpg", "https://i.pinimg.com/736x/73/92/73/7392738c606475fb3801006e96913427.jpg"], "card_colors": ["#8f0083"], "custom_font": { "family": "'Caveat'", "link": "Caveat:wght@400;700" } }, "preview": "https://i.pinimg.com/564x/66/23/14/662314b9e24dd7f024c00f5dbae61d12.jpg" },
{ "color": "beige", "score": 4340, "title": "beigestudy by nowshin", "exports": { "disable_color_overlay": true, "gradient_cards": false, "dark_mode": true, "dark_preset": { "background-0": "#fff8f0", "background-1": "#e8ccb5", "background-2": "#fee1e1", "borders": "#b48e7e", "links": "#ffcccc", "sidebar": "#f0d6d6", "sidebar-text": "#704c2e", "text-0": "#472610", "text-1": "#481d0f", "text-2": "#ffcccc" }, "custom_cards": ["https://i.pinimg.com/736x/87/fc/8c/87fc8ca9428caff232f37bd9ef547aad.jpg", "https://i.pinimg.com/originals/14/f6/57/14f657847d5085bb944ce9df6e25f7c3.jpg", "https://i.pinimg.com/originals/dd/07/87/dd078735318110132bc02e22be16c4b7.jpg", "https://i.pinimg.com/736x/82/0d/7e/820d7edf5c4ae7d29e54772eee33c92d.jpg", "https://i.pinimg.com/originals/ce/67/aa/ce67aaa41da4c60eca91e30547499267.jpg", "https://i.pinimg.com/564x/5a/23/53/5a2353d4d88067869c5aa6a6cc7c2882.jpg", "https://i.pinimg.com/564x/7a/98/13/7a9813601d213722fcdb2c4d41dfed85.jpg", "https://i.pinimg.com/564x/07/47/52/074752696090540ff352a4c1196b6107.jpg", "https://i.pinimg.com/564x/9f/90/be/9f90be69e82f94a776bb58033fc7ed57.jpg"], "card_colors": ["#d9b99b"], "custom_font": { "family": "'Comfortaa'", "link": "Comfortaa:wght@400;700" } }, "preview": "https://i.pinimg.com/564x/5a/23/53/5a2353d4d88067869c5aa6a6cc7c2882.jpg" },
{ "color": "pink", "score": 4440, "title": "BerryStickO by EcstasyCheese", "exports": { "disable_color_overlay": true, "gradient_cards": false, "dark_mode": true, "dark_preset": { "background-0": "#feecf0", "background-1": "#ffffff", "background-2": "#ca1c47", "borders": "#e56182", "links": "#ca1c47", "sidebar": "linear-gradient(#e56182, #f4c0cd)", "sidebar-text": "#ffffff", "text-0": "#ca1c47", "text-1": "#e56182", "text-2": "#000000" }, "custom_cards": ["https://preview.redd.it/strawberry-sticko-v1-pics-for-bettercanvas-v0-94b9j5sn92hd1.png?width=528&format=png&auto=webp&s=bcb9064929f077dac8ab9755b8854d0cb6170847", "https://preview.redd.it/strawberry-sticko-v1-pics-for-bettercanvas-v0-svbdb5sn92hd1.png?width=528&format=png&auto=webp&s=4ff3ca5aceae9fe2937550ea4de69d03fbbd32a8", "https://preview.redd.it/strawberry-sticko-v1-pics-for-bettercanvas-v0-ro8no9sn92hd1.png?width=528&format=png&auto=webp&s=222f2855a7508be4642fb3e0fd10d96dc942e7e2", "https://preview.redd.it/strawberry-sticko-v1-pics-for-bettercanvas-v0-wrwoh6sn92hd1.png?width=528&format=png&auto=webp&s=e331b7ac992f14b49782b512452393546ee2164a", "https://preview.redd.it/strawberry-sticko-v1-pics-for-bettercanvas-v0-cacj2asn92hd1.png?width=528&format=png&auto=webp&s=a11d3f39c94cafb6e956b58220419c6da4448416", "https://preview.redd.it/strawberry-sticko-v1-pics-for-bettercanvas-v0-dzmi19sn92hd1.png?width=528&format=png&auto=webp&s=f59d7aa5aaacc6e4d184e7dd014e8eded1cfde9f", "https://preview.redd.it/strawberry-sticko-v1-pics-for-bettercanvas-v0-l6yyr7sn92hd1.png?width=528&format=png&auto=webp&s=7fd269561ef552feab8df80c1ddc830c3330e28a", "https://preview.redd.it/strawberry-sticko-v1-pics-for-bettercanvas-v0-on4fi3sn92hd1.png?width=528&format=png&auto=webp&s=da34348328014ef38a1caca5f8b8f141c4508e3f"], "card_colors": ["#ca1c47"], "custom_font": { "family": "'gochi hand'", "link": "Gochi+Hand:wght@400;700" } }, "preview": "https://preview.redd.it/strawberry-sticko-v1-pics-for-bettercanvas-v0-svbdb5sn92hd1.png?width=528&format=png&auto=webp&s=4ff3ca5aceae9fe2937550ea4de69d03fbbd32a8" },
{ "color": "pink", "score": 4440, "title": "BerryStickO by EcstasyCheese", "exports": { "disable_color_overlay": true, "gradient_cards": false, "dark_mode": true, "dark_preset": { "background-0": "#feecf0", "background-1": "#ffffff", "background-2": "#ca1c47", "borders": "#e56182", "links": "#ca1c47", "sidebar": "linear-gradient(#e56182, #f4c0cd)", "sidebar-text": "#ffffff", "text-0": "#ca1c47", "text-1": "#e56182", "text-2": "#000000" }, "custom_cards": ["https://preview.redd.it/strawberry-sticko-v1-pics-for-canvasrefined-v0-94b9j5sn92hd1.png?width=528&format=png&auto=webp&s=bcb9064929f077dac8ab9755b8854d0cb6170847", "https://preview.redd.it/strawberry-sticko-v1-pics-for-canvasrefined-v0-svbdb5sn92hd1.png?width=528&format=png&auto=webp&s=4ff3ca5aceae9fe2937550ea4de69d03fbbd32a8", "https://preview.redd.it/strawberry-sticko-v1-pics-for-canvasrefined-v0-ro8no9sn92hd1.png?width=528&format=png&auto=webp&s=222f2855a7508be4642fb3e0fd10d96dc942e7e2", "https://preview.redd.it/strawberry-sticko-v1-pics-for-canvasrefined-v0-wrwoh6sn92hd1.png?width=528&format=png&auto=webp&s=e331b7ac992f14b49782b512452393546ee2164a", "https://preview.redd.it/strawberry-sticko-v1-pics-for-canvasrefined-v0-cacj2asn92hd1.png?width=528&format=png&auto=webp&s=a11d3f39c94cafb6e956b58220419c6da4448416", "https://preview.redd.it/strawberry-sticko-v1-pics-for-canvasrefined-v0-dzmi19sn92hd1.png?width=528&format=png&auto=webp&s=f59d7aa5aaacc6e4d184e7dd014e8eded1cfde9f", "https://preview.redd.it/strawberry-sticko-v1-pics-for-canvasrefined-v0-l6yyr7sn92hd1.png?width=528&format=png&auto=webp&s=7fd269561ef552feab8df80c1ddc830c3330e28a", "https://preview.redd.it/strawberry-sticko-v1-pics-for-canvasrefined-v0-on4fi3sn92hd1.png?width=528&format=png&auto=webp&s=da34348328014ef38a1caca5f8b8f141c4508e3f"], "card_colors": ["#ca1c47"], "custom_font": { "family": "'gochi hand'", "link": "Gochi+Hand:wght@400;700" } }, "preview": "https://preview.redd.it/strawberry-sticko-v1-pics-for-canvasrefined-v0-svbdb5sn92hd1.png?width=528&format=png&auto=webp&s=4ff3ca5aceae9fe2937550ea4de69d03fbbd32a8" },
//{ "title": "Stray kids by Saishee", "exports": { "disable_color_overlay": true, "gradient_cards": false, "dark_mode": true, "dark_preset": { "background-0": "#0f0f0f", "background-1": "#0c0c0c", "background-2": "#211c1c", "borders": "#1e1e1e", "links": "#c6d7d1", "sidebar": "#0c0c0c", "sidebar-text": "#f5f5f5", "text-0": "#edc4c4", "text-1": "#e2e2e2", "text-2": "#5b5757" }, "custom_cards": ["https://i.pinimg.com/474x/6a/a4/32/6aa4326db14cfc001f926442bec125d5.jpg", "https://i.pinimg.com/474x/b3/7a/9c/b37a9c6857416ccf33bec2c68bcc94b5.jpg", "https://i.pinimg.com/564x/76/a3/fb/76a3fb5cc7caddfa3239fc5a32cb1dee.jpg", "https://i.pinimg.com/474x/0a/e3/23/0ae323e8bd7934d8441816499d8e7359.jpg", "https://i.pinimg.com/474x/69/28/c8/6928c8c7bf0cadbd4369d14f46b6c2d8.jpg", "https://i.pinimg.com/474x/4d/57/a9/4d57a99053f87872a7f53d6cdf1f65de.jpg", "https://i.pinimg.com/474x/e4/52/5a/e4525a3aceb0656b6124f7f1e5d477d6.jpg", "https://i.pinimg.com/474x/dc/00/41/dc0041b2a2bc234837a38aef21f3ccd2.jpg", "https://i.pinimg.com/474x/69/c7/7e/69c77ef8a3e9017f4a956535b0e6eb4f.jpg"], "card_colors": ["#c6d7d1"], "custom_font": { "family": "'Playfair Display'", "link": "Playfair+Display:wght@400;700" } }, "preview": "https://i.pinimg.com/474x/69/c7/7e/69c77ef8a3e9017f4a956535b0e6eb4f.jpg" },
{ "color": "beige", "score": 3330, "title": "Fantasy by Miranda", "exports": { "disable_color_overlay": true, "gradient_cards": false, "dark_mode": true, "dark_preset": { "background-0": "#E1D8C4", "background-1": "#", "background-2": "#", "borders": "#3d251e", "links": "#d28584", "sidebar": "linear-gradient(#d28584c7, #000000c7), center url(\"https://i.pinimg.com/564x/32/03/2f/32032f56d1513a97a5804c09739545f9.jpg\")", "sidebar-text": "#f5f5f5", "text-0": "#3d251e", "text-1": "#3d251e", "text-2": "#3d251e" }, "custom_cards": ["https://i.pinimg.com/736x/2b/22/c6/2b22c64160677cb97fa36e8012f07ddc.jpg", "https://i.pinimg.com/736x/48/ef/ed/48efedc6e53fb27170b52a76b73b7204.jpg", "https://i.pinimg.com/564x/85/4d/7b/854d7bd85ae1bef392c80c7e3f01a419.jpg", "https://i.pinimg.com/564x/59/e3/a7/59e3a7e93e7354878238857f3c070f6e.jpg", "https://i.pinimg.com/564x/32/03/2f/32032f56d1513a97a5804c09739545f9.jpg", "https://i.pinimg.com/564x/60/37/d8/6037d838a415a126ac091ca733646bca.jpg", "https://i.pinimg.com/736x/87/e4/ec/87e4ecc23258fac19b6b00bdcef73939.jpg", "https://i.pinimg.com/564x/39/3e/0e/393e0eacc03642dd8fa663f230f5164b.jpg", "https://i.pinimg.com/564x/0c/79/c9/0c79c9d5ea846b1e79fe2db31f76d82e.jpg", "https://i.pinimg.com/564x/ff/b0/17/ffb017b914b5acd29afc18251dab18dd.jpg", "https://i.pinimg.com/564x/d5/38/54/d53854ba4b45d6e8ab7862319a03bdf5.jpg"], "card_colors": ["#3d251e"], "custom_font": { "family": "'Nanum Myeongjo'", "link": "Nanum+Myeongjo:wght@400;700" } }, "preview": "https://i.pinimg.com/564x/39/3e/0e/393e0eacc03642dd8fa663f230f5164b.jpg" },
{ "color": "red", "score": 4430, "title": "cherry by elizabeth", "exports": { "disable_color_overlay": true, "gradient_cards": false, "dark_mode": true, "dark_preset": { "background-0": "#963131", "background-1": "#5a2626", "background-2": "", "borders": "", "links": "", "sidebar": "#5a2626", "sidebar-text": "#eddbc2", "text-0": "#eddbc2", "text-1": "#eddbc2", "text-2": "#eddbc2" }, "custom_cards": ["https://i.pinimg.com/564x/b5/11/75/b51175545c2af654df242afa0d514025.jpg", "https://i.pinimg.com/736x/f9/6a/6a/f96a6a6302269e92a9d345ce4c54646b.jpg", "https://i.pinimg.com/564x/ac/41/e9/ac41e9ec5ff2d9d95ede13ba33b77235.jpg", "https://i.pinimg.com/736x/6b/7c/1b/6b7c1b108902be1deb72e31c7c7020e4.jpg", "https://i.pinimg.com/736x/79/88/f4/7988f47d7903bd6aa4d8f366cdddeaf8.jpg", "https://i.pinimg.com/564x/97/2d/f7/972df785c3f9f1e0d9b93615d2520328.jpg", "https://i.pinimg.com/736x/36/b0/0b/36b00bf63da23229daab0a82be9bd7fe.jpg"], "card_colors": ["#bb3b38", "#008400", "#5a2626", "#5a2626", "#5a2626", "#5a2626", "#5a2626", "#bb3b38"], "custom_font": { "family": "'Rubik'", "link": "Rubik:wght@400;700" } }, "preview": "https://i.pinimg.com/564x/b5/11/75/b51175545c2af654df242afa0d514025.jpg" },

View File

@ -1,6 +1,6 @@
{
"manifest_version": 3,
"name": "Actually Better Canvas",
"name": "Canvas Refined",
"description": "Even More Feature packed extension for Canvas.",
"version": "5.12.6",
"icons": {
@ -15,7 +15,7 @@
"38": "icon/icon-38.png"
},
"default_popup": "html/popup.html",
"default_title": "Better Canvas"
"default_title": "Canvas Refined"
},
"background": {
"service_worker": "js/background.js"