Skip to content

Commit 321d8fa

Browse files
cdroulersclaude
andauthored
Replace XMLHttpRequest with fetch API in levelControls.ts (#50)
- Modernize remote level loading with fetch API - Simplify error handling - Maintain same functionality - Verified with Playwright and unit tests - Fix Sass deprecation warnings - Replace @import with @use directives - Move @use statements to the top of the file - Add @use "sass:math" and update random() function calls to math.random() - Prepare for Dart Sass 3.0.0 compatibility Resolves #48 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
1 parent 874c288 commit 321d8fa

File tree

3 files changed

+20
-29
lines changed

3 files changed

+20
-29
lines changed

src/block-fly/display/levelControls.ts

Lines changed: 11 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -29,29 +29,18 @@ export function getDefaultLevels(): Promise<ILevelSet> {
2929
}
3030

3131
export function getRemoteLevels(path: string): Promise<ILevelSet> {
32-
return new Promise<ILevelSet>((resolve, reject) => {
33-
const xhr = new XMLHttpRequest();
34-
35-
xhr.open("GET", path);
36-
xhr.responseType = "json";
37-
38-
xhr.onload = () => {
39-
if (xhr.status === 200) {
40-
const json = typeof xhr.response === "string" ? JSON.parse(xhr.response) : xhr.response;
41-
const levels = transformReponseToLevels(json, qualifyURL(path));
42-
Storage.setItem(levels.uri, JSON.stringify(levels));
43-
resolve(levels);
44-
} else {
45-
reject(Error("Cannot load levels; error : " + xhr.statusText));
32+
return fetch(path)
33+
.then((response) => {
34+
if (!response.ok) {
35+
throw new Error(`Cannot load levels; error: ${response.status} ${response.statusText}`);
4636
}
47-
};
48-
49-
xhr.onerror = () => {
50-
reject(Error("There was a network error."));
51-
};
52-
53-
xhr.send();
54-
});
37+
return response.json();
38+
})
39+
.then((json) => {
40+
const levels = transformReponseToLevels(json, qualifyURL(path));
41+
Storage.setItem(levels.uri, JSON.stringify(levels));
42+
return levels;
43+
});
5544
}
5645

5746
export function getLevelsFromFile(file: File): Promise<ILevelSet> {

src/block-fly/stylesheets/fireworks.style.scss

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
// Taken from https://codepen.io/yshlin/pen/ylDEk
2+
@use "sass:math";
3+
24
$particles: 50;
35
$width: 500;
46
$height: 500;
@@ -9,11 +11,11 @@ $box-shadow2: ();
911
@for $i from 0 through $particles {
1012
$box-shadow:
1113
$box-shadow,
12-
random($width) - calc($width / 2) +
14+
math.random($width) - calc($width / 2) +
1315
px
14-
random($height) - calc($height / 1.2) +
16+
math.random($height) - calc($height / 1.2) +
1517
px
16-
hsl(random(360), 100%, 50%);
18+
hsl(math.random(360), 100%, 50%);
1719
$box-shadow2:
1820
$box-shadow2,
1921
0 0 #fff;

src/block-fly/stylesheets/site.style.scss

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
@use "./mdl-overrides.style";
2+
@use "./dialog-polyfill.style";
3+
@use "./fireworks.style";
4+
15
:root {
26
--very-dark-background: #333;
37
--slightly-dark-background: #bbb;
@@ -80,7 +84,3 @@ a[href^="http://"], a[href^="https://"]
8084
background: center right no-repeat
8185
url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjxzdmcKICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICB4bWxuczpjYz0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbnMjIgogICB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiCiAgIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgdmVyc2lvbj0iMS4xIgogICB3aWR0aD0iMTAiCiAgIGhlaWdodD0iMTAiCiAgIGlkPSJzdmcyIj4KICA8bWV0YWRhdGEKICAgICBpZD0ibWV0YWRhdGE3Ij4KICAgIDxyZGY6UkRGPgogICAgICA8Y2M6V29yawogICAgICAgICByZGY6YWJvdXQ9IiI+CiAgICAgICAgPGRjOmZvcm1hdD5pbWFnZS9zdmcreG1sPC9kYzpmb3JtYXQ+CiAgICAgICAgPGRjOnR5cGUKICAgICAgICAgICByZGY6cmVzb3VyY2U9Imh0dHA6Ly9wdXJsLm9yZy9kYy9kY21pdHlwZS9TdGlsbEltYWdlIiAvPgogICAgICAgIDxkYzp0aXRsZT48L2RjOnRpdGxlPgogICAgICA8L2NjOldvcms+CiAgICA8L3JkZjpSREY+CiAgPC9tZXRhZGF0YT4KICA8ZwogICAgIHRyYW5zZm9ybT0idHJhbnNsYXRlKC04MjYuNDI4NTksLTY5OC43OTA3NykiCiAgICAgaWQ9ImxheWVyMSI+CiAgICA8cmVjdAogICAgICAgd2lkdGg9IjUuOTgyMTQyOSIKICAgICAgIGhlaWdodD0iNS45ODIxNDI5IgogICAgICAgeD0iODI2LjkyODU5IgogICAgICAgeT0iNzAyLjMwODY1IgogICAgICAgaWQ9InJlY3QyOTk2IgogICAgICAgc3R5bGU9ImZpbGw6I2ZmZmZmZjtmaWxsLW9wYWNpdHk6MTtzdHJva2U6IzAwNjZjYztzdHJva2Utd2lkdGg6MXB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjEiIC8+CiAgICA8ZwogICAgICAgdHJhbnNmb3JtPSJtYXRyaXgoMC43MDcxMDY3OCwwLjcwNzEwNjc4LC0wLjcwNzEwNjc4LDAuNzA3MTA2NzgsNzYyLjg3LC0zNTkuODgzMzkpIgogICAgICAgaWQ9Imc0ODE1Ij4KICAgICAgPHBhdGgKICAgICAgICAgZD0ibSA3OTYuOTA4MTksNzAwLjI4MzE3IDMuNzAxMjcsLTMuNzAxMjYgMy44MTE3NCwzLjgxMTc1IC0wLjAxODksMi4yMDMzNiAtMS44NTIzNCwwIDAsMy44NTQzIC0zLjgwMjMzLDAgMCwtMy45NzEwOCAtMS44NTM2LDAgeiIKICAgICAgICAgaWQ9InBhdGg0Nzc3IgogICAgICAgICBzdHlsZT0iZmlsbDojMDA2NmZmO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lIiAvPgogICAgICA8cGF0aAogICAgICAgICBkPSJtIDgwMC42MDk0Niw2OTguMDAyNDQgMy40Njk4NiwzLjQzODY1IC0yLjU3MDIsMCAwLDQuMDc0MzYgLTEuNzM2MiwwIDAsLTQuMDc0MzYgLTIuNjE3NTQsLTMuNmUtNCB6IgogICAgICAgICBpZD0icGF0aDQ3NzkiCiAgICAgICAgIHN0eWxlPSJmaWxsOiNmZmZmZmY7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmUiIC8+CiAgICA8L2c+CiAgPC9nPgo8L3N2Zz4K);
8286
}
83-
84-
@import "./mdl-overrides.style";
85-
@import "./dialog-polyfill.style";
86-
@import "./fireworks.style";

0 commit comments

Comments
 (0)