class-studys 5.0.0 → 6.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/index.html +100 -8
- package/package.json +1 -1
package/index.html
CHANGED
|
@@ -749,6 +749,7 @@ body[data-anim='off'] *, body[data-anim='off'] *::before, body[data-anim='off']
|
|
|
749
749
|
}
|
|
750
750
|
</style>
|
|
751
751
|
|
|
752
|
+
<base target="_blank">
|
|
752
753
|
<base target="_blank">
|
|
753
754
|
</head>
|
|
754
755
|
<body data-bg="aurora">
|
|
@@ -1103,7 +1104,83 @@ const DEFAULT_GAMES = [
|
|
|
1103
1104
|
desc: 'run from cop ',
|
|
1104
1105
|
tags: ['endless','cop'], color: '#fb7185',
|
|
1105
1106
|
},
|
|
1106
|
-
|
|
1107
|
+
{
|
|
1108
|
+
id: 'Bacon May Die', name: 'Bacon May Die',
|
|
1109
|
+
url: 'https://unpkg.com/schooluk-bacon-may-die@1.0.0/index.html',
|
|
1110
|
+
cover: 'https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcRG8Ra7wjHyaMeLnHp70ql98oi25b33UsPI63N-Jwbapw&s=10',
|
|
1111
|
+
desc: 'brawler — fight your way through.',
|
|
1112
|
+
tags: ['brawler','action'], color: '#fb7185',
|
|
1113
|
+
},
|
|
1114
|
+
{
|
|
1115
|
+
id: 'paper-fly', name: 'Paper Fly',
|
|
1116
|
+
url: 'https://unpkg.com/papergmfly@1.0.0/index.html',
|
|
1117
|
+
cover: 'https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQQFa7pNRwbmpuk0rwFYmYYjwAdFMI6qH18R1rO_rd8XQ&s=10',
|
|
1118
|
+
desc: 'fold, flick and fly.',
|
|
1119
|
+
tags: ['arcade','2D'], color: '#22d3ee',
|
|
1120
|
+
},
|
|
1121
|
+
{
|
|
1122
|
+
id: 'slope-505', name: 'Slope 505',
|
|
1123
|
+
url: 'https://unpkg.com/sloeplus@1.0.0/index.html',
|
|
1124
|
+
cover: 'https://play-lh.googleusercontent.com/Ev5gkPTONr-1k1r7erT0iiW-pUZoGUH_6FVQdD91e9ghSAqZRMTaFVGQW5Z6PLOfFgxZnJhdEBE2z-TgfZ1bsg',
|
|
1125
|
+
desc: 'the rolling ball, remade.',
|
|
1126
|
+
tags: ['slope','3D'], color: '#fb7185',
|
|
1127
|
+
},
|
|
1128
|
+
{
|
|
1129
|
+
id: 'boat-game', name: 'Boat Game',
|
|
1130
|
+
url: 'https://unpkg.com/boateman@1.0.0/index.html',
|
|
1131
|
+
cover: 'https://play-lh.googleusercontent.com/k80-V4CxUpsoNUTiZCasfAF4yTxy428anUQiM_AieHnLRMq2qmCPIHIYWT8dYATGyo1eTjZLZEa3aa3b4kyingA',
|
|
1132
|
+
desc: 'captain your boat.',
|
|
1133
|
+
tags: ['boat','arcade'], color: '#3b82f6',
|
|
1134
|
+
},
|
|
1135
|
+
{
|
|
1136
|
+
id: '1v1-lol', name: '1v1.lol',
|
|
1137
|
+
url: 'https://unpkg.com/edcube-1v1-lol@5.0.0/index.html',
|
|
1138
|
+
cover: 'https://play-lh.googleusercontent.com/NAE7nd8mxERLlT-eIM68aEQi1RthPUzVd8KN_C-RPmvDgBLJ-C_kBHrBQFYPi8wQwr_nkxGUadoS0xStbU_jc7s=w240-h480-rw',
|
|
1139
|
+
desc: 'build and battle, 1v1.',
|
|
1140
|
+
tags: ['shooter','multiplayer'], color: '#22d3ee',
|
|
1141
|
+
},
|
|
1142
|
+
{
|
|
1143
|
+
id: 'crossy-road', name: 'Crossy Road',
|
|
1144
|
+
url: 'https://unpkg.com/edcube-crossy-road@5.0.0/index.html',
|
|
1145
|
+
cover: 'https://play-lh.googleusercontent.com/LX__Y8tKCvkvEgboZtQfDsvYiNFa6kwWSpqObipZI2MLK5rFVd5tEU8xgMNoMj1ICOf9TO7PFoFmiKGeIpf1=w240-h480-rw',
|
|
1146
|
+
desc: 'cross the road, dodge the traffic.',
|
|
1147
|
+
tags: ['arcade','crossing'], color: '#facc15',
|
|
1148
|
+
},
|
|
1149
|
+
{
|
|
1150
|
+
id: 'basketball-stars', name: 'Basketball Stars',
|
|
1151
|
+
url: 'https://unpkg.com/edcube-basketball-stars@5.0.0/index.html',
|
|
1152
|
+
cover: 'https://m.media-amazon.com/images/I/81BL1Hx2KuL.png',
|
|
1153
|
+
desc: 'sink threes and take the crown.',
|
|
1154
|
+
tags: ['sports','basketball'], color: '#ff6b1a',
|
|
1155
|
+
},
|
|
1156
|
+
{
|
|
1157
|
+
id: 'bitlife', name: 'Bitlife',
|
|
1158
|
+
url: 'https://unpkg.com/edcube-bitlife@5.0.0/index.html',
|
|
1159
|
+
cover: 'https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcRZdo5cBqkv1uAcfCofpC-WAViocRNLlysohwHMV2Lqzw&s=10',
|
|
1160
|
+
desc: 'live a whole life, one tap at a time.',
|
|
1161
|
+
tags: ['sim','life'], color: '#34d399',
|
|
1162
|
+
},
|
|
1163
|
+
{
|
|
1164
|
+
id: 'tag', name: 'Tag',
|
|
1165
|
+
url: 'https://unpkg.com/edcube-tag@1.0.0/index.html',
|
|
1166
|
+
cover: 'https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcSFwGQ9vG6ZifxDpWHtuu8oSzYqll79xZ9rW_KwPwzCdA&s',
|
|
1167
|
+
desc: "don't get caught.",
|
|
1168
|
+
tags: ['platformer','2D'], color: '#facc15',
|
|
1169
|
+
},
|
|
1170
|
+
{
|
|
1171
|
+
id: 'block-blast', name: 'Block Blast',
|
|
1172
|
+
url: 'https://unpkg.com/edcube-block-blast@5.0.0/index.html',
|
|
1173
|
+
cover: 'https://imgs.crazygames.com/block-puzzle-master_1x1/20250924025352/block-puzzle-master_1x1-cover?format=auto&quality=70&metadata=none',
|
|
1174
|
+
desc: 'blast blocks, clear lines.',
|
|
1175
|
+
tags: ['puzzle'], color: '#a855f7',
|
|
1176
|
+
},
|
|
1177
|
+
{
|
|
1178
|
+
id: 'cut-the-rope', name: 'Cut the Rope',
|
|
1179
|
+
url: 'https://unpkg.com/edcube-cut-the-rope@5.0.0/index.html',
|
|
1180
|
+
cover: 'https://play-lh.googleusercontent.com/2bTmHHM7DBMVe7fLh16Em-J-tVBMFGL2HJCxPAMNF7gAYIfU6EZoYG1__lQ0cvFMEyp3GU9CGijZzEB1qJHF',
|
|
1181
|
+
desc: 'feed the monster, cut the rope.',
|
|
1182
|
+
tags: ['puzzle'], color: '#34d399',
|
|
1183
|
+
},
|
|
1107
1184
|
];
|
|
1108
1185
|
|
|
1109
1186
|
const DEMO_MOVIES = [
|
|
@@ -1132,7 +1209,7 @@ const DEMO_MOVIES = [
|
|
|
1132
1209
|
|
|
1133
1210
|
// ── persistence ──
|
|
1134
1211
|
const K = {
|
|
1135
|
-
games: 'emby.games.v1', movies: 'emby.movies.
|
|
1212
|
+
games: 'emby.games.v1', movies: 'emby.movies.v2',
|
|
1136
1213
|
prefs: 'emby.prefs.v1', profile: 'emby.profile.v1',
|
|
1137
1214
|
last: 'emby.last.v1', overrides: 'emby.overrides.v1',
|
|
1138
1215
|
};
|
|
@@ -1965,6 +2042,7 @@ const DEMO_MOVIES = [
|
|
|
1965
2042
|
const total = 3000;
|
|
1966
2043
|
const start = performance.now();
|
|
1967
2044
|
let line = -1;
|
|
2045
|
+
let finished = false;
|
|
1968
2046
|
const step = () => {
|
|
1969
2047
|
const p = Math.min(1, (performance.now() - start) / total);
|
|
1970
2048
|
fill.style.width = Math.round(p * 100) + '%';
|
|
@@ -1977,16 +2055,21 @@ const DEMO_MOVIES = [
|
|
|
1977
2055
|
else finishBoot();
|
|
1978
2056
|
};
|
|
1979
2057
|
const finishBoot = () => {
|
|
2058
|
+
if (finished) return;
|
|
2059
|
+
finished = true;
|
|
1980
2060
|
fill.style.width = '100%';
|
|
1981
2061
|
typeEl.textContent = 'ready. pull up.';
|
|
1982
2062
|
setTimeout(() => {
|
|
1983
|
-
$('boot')
|
|
1984
|
-
|
|
2063
|
+
const b = $('boot');
|
|
2064
|
+
if (b) { b.classList.add('done'); setTimeout(() => b.remove(), 600); }
|
|
1985
2065
|
confetti(26);
|
|
1986
2066
|
}, 320);
|
|
1987
2067
|
};
|
|
2068
|
+
// failsafe: hard-exit the splash no matter what after 3.5s
|
|
2069
|
+
setTimeout(finishBoot, 3500);
|
|
1988
2070
|
if (!state.prefs.anim) { typeEl.textContent = 'ready.'; finishBoot(); return; }
|
|
1989
2071
|
requestAnimationFrame(step);
|
|
2072
|
+
$('boot-skip').addEventListener('click', () => { finishBoot(); const b = $('boot'); if (b) setTimeout(() => b.remove(), 300); });
|
|
1990
2073
|
}
|
|
1991
2074
|
|
|
1992
2075
|
// ═══════════ init ═══════════
|
|
@@ -2044,13 +2127,22 @@ const DEMO_MOVIES = [
|
|
|
2044
2127
|
runBoot();
|
|
2045
2128
|
}
|
|
2046
2129
|
|
|
2047
|
-
// keep it all in-page: block view-source
|
|
2130
|
+
// keep it all in-page: block view-source, devtools & right-click menu
|
|
2048
2131
|
document.addEventListener('contextmenu', (e) => { e.preventDefault(); });
|
|
2132
|
+
window.addEventListener('contextmenu', (e) => { e.preventDefault(); return false; });
|
|
2133
|
+
document.oncontextmenu = () => false;
|
|
2049
2134
|
window.addEventListener('keydown', (e) => {
|
|
2050
2135
|
const k = (e.key || '').toLowerCase();
|
|
2051
|
-
|
|
2052
|
-
if (
|
|
2053
|
-
|
|
2136
|
+
const combo = e.ctrlKey || e.metaKey;
|
|
2137
|
+
if (combo && (k === 'u' || k === 's' || k === 'p')) { e.preventDefault(); e.stopPropagation(); return false; }
|
|
2138
|
+
if (combo && e.shiftKey && (k === 'i' || k === 'j' || k === 'c' || k === 'k' || k === 'u')) { e.preventDefault(); e.stopPropagation(); return false; }
|
|
2139
|
+
if (e.key === 'F12') { e.preventDefault(); e.stopPropagation(); return false; }
|
|
2140
|
+
}, true);
|
|
2141
|
+
// if someone opens a view-source: tab, bounce them back to the real page
|
|
2142
|
+
if (location.protocol === 'view-source:') { /* noop guard */ }
|
|
2143
|
+
if (document.documentElement && location.href.startsWith('view-source:')) {
|
|
2144
|
+
location.replace(location.href.replace('view-source:', ''));
|
|
2145
|
+
}
|
|
2054
2146
|
|
|
2055
2147
|
document.addEventListener('DOMContentLoaded', init);
|
|
2056
2148
|
})();
|