Skip to content

Commit c96aa98

Browse files
authored
Suggest new theme from Theme Store, Segment Editor Create/Save and Exit button, add omega, omegacap, and i/j/k-hat symbols
2 parents 310e2df + 2b007da commit c96aa98

File tree

11 files changed

+78
-28
lines changed

11 files changed

+78
-28
lines changed

admin/editor.html

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -133,7 +133,10 @@ <h1>Questions</h1>
133133
</div>
134134
<button class="space" id="launch-speed-mode">Launch Speed Mode</button>
135135
</div>
136-
<button class="space" id="create-button">Create</button>
136+
<div class="input-group row space">
137+
<button id="create-button">Create</button>
138+
<button id="create-and-exit-button">Create and Exit</button>
139+
</div>
137140
</div>
138141
<!-- Controls -->
139142
<div id="controls-container" class="pill">

admin/upload.html

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -141,11 +141,6 @@
141141
flex-direction: column;
142142
}
143143

144-
.input-group.row {
145-
flex-direction: row;
146-
gap: 0.25em;
147-
}
148-
149144
.input-group:not(.row),
150145
.input-group:has(#ai),
151146
.input-group:has([data-question-number]) {
@@ -187,6 +182,7 @@
187182

188183
#stem.active {
189184
background: var(--accent-color, dodgerblue);
185+
color: var(--accent-text-color, white);
190186
}
191187

192188
#stem.active i.bi-diagram-3 {

index.html

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -211,12 +211,19 @@ <h6 data-question-title hidden></h6>
211211
<i class="bi bi-three-dots"></i>
212212
</button>
213213
</div>
214-
<div id="set-type-selector" data-button-select>
215-
<button aria-selected="true" data-value="brackets">&lcub; Brackets &rcub;</button>
216-
<button aria-selected="false" data-value="vector">&lt; Vector &gt;</button>
217-
<button aria-selected="false" data-value="array">&lbrack; Array &rbrack;</button>
218-
<button aria-selected="false" data-value="coordinate">&lpar; Coordinate &rpar;</button>
219-
<button aria-selected="false" data-value="product">&lang; Product &rang;</button>
214+
<div class="row">
215+
<div id="set-type-selector" data-button-select>
216+
<button aria-selected="true" data-value="brackets">&lcub; Brackets &rcub;</button>
217+
<button aria-selected="false" data-value="vector">&lt; Vector &gt;</button>
218+
<button aria-selected="false" data-value="array">&lbrack; Array &rbrack;</button>
219+
<button aria-selected="false" data-value="coordinate">&lpar; Coordinate &rpar;</button>
220+
<button aria-selected="false" data-value="product">&lang; Product &rang;</button>
221+
</div>
222+
<div class="button-grid" style="width: fit-content; margin-left: auto;">
223+
<button data-insert-symbol="40" data-target-input="set-input"></button>
224+
<button data-insert-symbol="41" data-target-input="set-input"></button>
225+
<button data-insert-symbol="42" data-target-input="set-input"></button>
226+
</div>
220227
</div>
221228
<div class="button-grid">
222229
<input type="text" autocomplete="off" id="set-input" data-set-input="1" />

src/checker/admin.js

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1100,6 +1100,9 @@ try {
11001100
// Save
11011101
document.querySelectorAll("#save-button").forEach(w => w.addEventListener("click", save));
11021102
document.querySelectorAll("#create-button").forEach(w => w.addEventListener("click", createSegment));
1103+
document.querySelectorAll("#create-and-exit-button").forEach(w => w.addEventListener("click", () => {
1104+
createSegment(null, true);
1105+
}));
11031106

11041107
async function save(event, hideResult) {
11051108
if (!active) return;
@@ -2882,14 +2885,15 @@ try {
28822885
const top = (window.screen.height / 2) - (height / 2);
28832886
const windowFeatures = `width=${width},height=${height},resizable=no,scrollbars=no,status=yes,left=${left},top=${top}`;
28842887
const newWindow = window.open(url, '_blank', windowFeatures);
2888+
ui.modeless(`<i class="bi bi-window-stack"></i>`, "Speed Mode Started", "Waiting for window to close...", true);
28852889
let uploadSuccessful = false;
28862890
let endingQuestionId = startingQuestionId || null;
28872891
let endingQuestion = startingQuestion || null;
28882892
window.addEventListener('message', (event) => {
28892893
if (event.origin !== (window.location.protocol + '//' + window.location.hostname + (window.location.port ? ':' + window.location.port : ''))) return;
28902894
if (event.data && (String(event.data) === 'uploadSuccess')) {
28912895
uploadSuccessful = true;
2892-
init();
2896+
// init();
28932897
} else if (event.data && String(event.data).includes(';+;')) {
28942898
[endingQuestionId, endingQuestion] = event.data.split(';+;');
28952899
} else if (event.data === 'exitToCourse') {
@@ -3782,7 +3786,7 @@ try {
37823786
ui.reloadUnsavedInputs();
37833787
}
37843788

3785-
function createSegment() {
3789+
function createSegment(event = null, exitToCourse = false) {
37863790
if (!active) return;
37873791
const course = document.getElementById("course-period-input");
37883792
const number = document.getElementById("segment-number-input");
@@ -3802,6 +3806,7 @@ try {
38023806
return name.focus();
38033807
}
38043808
document.querySelector("#create-button").disabled = true;
3809+
document.querySelector("#create-and-exit-button").disabled = true;
38053810
const question_ids = JSON.stringify(Array.from(document.querySelectorAll('.question')).filter(q => (q.querySelectorAll('input')[1].value.length > 0) && (q.querySelectorAll('input')[1].value != ' ')).map(q => {
38063811
return {
38073812
name: q.querySelectorAll('input')[1].value,
@@ -3847,7 +3852,11 @@ try {
38473852
.then((r) => {
38483853
ui.setUnsavedChanges(false);
38493854
ui.toast(loadedSegmentEditor ? "Segment updated successfully." : "Segment created successfully.", 3000, "success", "bi bi-check-circle-fill");
3850-
editSegment(null, loadedSegmentEditor ? loadedSegment.id : (r.id || null));
3855+
if (exitToCourse) {
3856+
window.location.href = '/admin/';
3857+
} else {
3858+
editSegment(null, loadedSegmentEditor ? loadedSegment.id : (r.id || null));
3859+
}
38513860
})
38523861
.catch((e) => {
38533862
console.error(e);
@@ -3888,6 +3897,7 @@ try {
38883897
document.getElementById("question-list").innerHTML = '';
38893898
JSON.parse(loadedSegment.question_ids).filter((item, index, self) => index === self.findIndex((t) => (t.id === item.id))).forEach(q => addExistingQuestion(q.id));
38903899
document.getElementById("create-button").innerText = "Save";
3900+
document.getElementById("create-and-exit-button").innerText = "Save and Exit";
38913901
document.querySelector('[data-delete-segment]')?.addEventListener('click', deleteSegmentConfirm);
38923902
document.querySelector('[edit-segment-questions]')?.addEventListener('click', () => {
38933903
if (ui.unsavedChanges) return ui.toast("You have unsaved changes. Please save or discard them before editing questions.", 3000, "error", "bi bi-exclamation-triangle-fill");

src/checker/checker.js

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import Element from "/src/modules/element.js";
77
import extendedSchedule from "/src/periods/extendedSchedule.json";
88
import * as themes from "/src/themes/themes.js";
99

10-
import { autocomplete, uniqueSymbols } from "/src/symbols/symbols.js";
10+
import { autocomplete, uniqueSymbols, insertFromIndex } from "/src/symbols/symbols.js";
1111
import { unixToString, unixToTimeString } from "/src/modules/time.js";
1212
import { getExtendedPeriodRange } from "/src/periods/periods";
1313
import { convertLatexToAsciiMath, convertLatexToMarkup, renderMathInElement } from "mathlive";
@@ -880,12 +880,6 @@ try {
880880

881881
resetInputs();
882882

883-
if (question.nonscored) {
884-
document.querySelector('.column:has(#answer-mode-selector)').setAttribute('hidden', '');
885-
} else {
886-
document.querySelector('.column:has(#answer-mode-selector)').removeAttribute('hidden');
887-
}
888-
889883
const feed = document.getElementById('question-history-feed');
890884
var latestResponses = history.filter(r => (String(r.segment) === String(segments.value)) && (String(r.question_id) === String(question.id))).sort((a, b) => new Date(b.timestamp) - new Date(a.timestamp));
891885
feed.innerHTML = "";

src/design.css

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -485,6 +485,11 @@ div.ML__keyboard {
485485
width: -webkit-fill-available;
486486
}
487487

488+
.input-group.row {
489+
flex-direction: row;
490+
gap: 0.25em;
491+
}
492+
488493
[square] {
489494
width: 2.25em !important;
490495
min-width: 36px;

src/layout.css

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -268,7 +268,7 @@ body:has(.island.visible) #checker {
268268
width: fit-content;
269269
overflow: hidden;
270270
align-self: center;
271-
position: sticky;
271+
position: fixed;
272272
bottom: 25px;
273273
}
274274

src/modules/ui.css

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -139,19 +139,19 @@ dialog > button[data-suggestions] {
139139
}
140140

141141
div.modeless {
142-
position: absolute;
142+
position: fixed;
143143
top: 50%;
144144
left: 50%;
145145
transform: translate(-50%, -50%);
146146
z-index: 999;
147-
148147
display: flex;
149148
flex-direction: column;
150149
align-items: center;
151150
padding: 1.5rem;
152151
border-radius: 1rem;
153152
box-shadow: 0 0 2rem rgba(0, 0, 0, 0.2);
154153
pointer-events: none;
154+
background: var(--background-color);
155155
}
156156

157157
div.modeless > h2 {
@@ -1099,6 +1099,26 @@ body:has(.topbar) #checker.horizontal .column:last-child {
10991099
transition: border-right-width 0.25s ease-in-out;
11001100
}
11011101

1102+
[data-modal-page="store"] .themes-grid .theme-item.suggest-theme {
1103+
border: 2px dashed var(--accent-color) !important;
1104+
background: transparent !important;
1105+
cursor: pointer;
1106+
transition: background-color 0.25s ease-in-out;
1107+
}
1108+
1109+
[data-modal-page="store"] .themes-grid .theme-item.suggest-theme:hover {
1110+
background: var(--surface-color) !important;
1111+
transition: background-color 0.25s ease-in-out;
1112+
}
1113+
1114+
[data-modal-page="store"] .themes-grid .theme-item.suggest-theme i {
1115+
position: relative !important;
1116+
margin: auto;
1117+
padding: 0;
1118+
top: 0;
1119+
left: 0;
1120+
}
1121+
11021122
[data-modal-page="store"] .themes-grid .theme-item i:not(.hd) {
11031123
position: absolute;
11041124
bottom: 10px;

src/modules/ui.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -435,7 +435,7 @@ export function view(path = "") {
435435
target.dispatchEvent(event);
436436
}
437437

438-
export function modeless(icon, message, description = null) {
438+
export function modeless(icon, message, description = null, stayOpen = false) {
439439
document.querySelector("div.modeless")?.remove();
440440
const element = document.createElement("div");
441441
const keyframes = [{ opacity: 0 }, { opacity: 1 }];
@@ -448,7 +448,7 @@ export function modeless(icon, message, description = null) {
448448
duration: 100,
449449
fill: "forwards",
450450
});
451-
setTimeout(() => {
451+
if (!stayOpen) setTimeout(() => {
452452
element.animate(keyframes, {
453453
duration: 100,
454454
direction: "reverse",

src/symbols/symbols.json

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,5 +36,10 @@
3636
"mu": "μ",
3737
"lambda": "λ",
3838
"gamma": "γ",
39-
"kappa": "κ"
39+
"kappa": "κ",
40+
"omega": "ω",
41+
"omegacap": "Ω",
42+
"ihat": "î",
43+
"jhat": "ĵ",
44+
"khat": ""
4045
}

0 commit comments

Comments
 (0)