Spaces:
Running
Running
File size: 4,357 Bytes
81255d7 556031d 35ded2f 076b821 35ded2f 6c80135 3744851 35ded2f 076b821 35ded2f 3744851 39a5656 3744851 ceeaf48 35ded2f 3744851 35ded2f 0c155a0 35ded2f 3744851 35ded2f 6c80135 556031d 6c80135 35ded2f 6c80135 556031d 6c80135 35ded2f 6c80135 556031d 076b821 35ded2f 556031d 81255d7 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 |
<!doctype html><html><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>TurboWarp Packager - Convert Scratch projects to HTML, EXE, and more</title><meta name="description" content="Converts Scratch 3, 2, or 1 projects into HTML files, zip archives, or executable programs for Windows, macOS, and Linux. Faster and more customizable than HTMLifier and forkphorus."><style>body[p4-splash-theme="dark"]:not([p4-loaded]) {
background-color: #111;
color-scheme: dark;
}
.input-for-remembering-project-file {
display: none;
}</style></head><body><noscript>This page requires JavaScript.</noscript><input type="file" class="input-for-remembering-project-file" autocomplete="on"><div id="app"></div>
<script>(async function() {
if (typeof window.showSaveFilePicker !== 'function') {
alert('このブラウザは showSaveFilePicker をサポートしていません。最新のGoogle Chromeなどをご利用ください。');
return;
}
const handleBlobLinks = (link) => {
link.addEventListener('click', async (event) => {
event.preventDefault(); // デフォルトのリンク動作をキャンセル
const blobUrl = link.href;
let originalName = link.download || 'downloaded-file'; // 元のファイル名を保持
let suggestedName = originalName;
try {
const response = await fetch(blobUrl);
if (!response.ok) throw new Error(`HTTPエラー: ${response.status}`);
const blob = await response.blob();
// ファイル名補正
if (suggestedName.endsWith('.')) {
console.warn(`ファイル名が "." で終わっています: ${suggestedName}`);
suggestedName = suggestedName.slice(0, -1); // 最後の "." を削除
}
if (!/\.[a-zA-Z0-9]+$/.test(suggestedName)) {
console.warn(`拡張子が見つかりません。デフォルトで ".html" を追加します: ${suggestedName}`);
suggestedName += '.html'; // 拡張子がない場合に "html" を付加
}
// ファイル保存ダイアログを表示
const handle = await window.showSaveFilePicker({
suggestedName: suggestedName,
types: [
{
description: 'HTML File',
accept: { 'text/html': ['.html'] },
},
{
description: 'All Files',
accept: { '*/*': ['.'] },
},
],
});
const writable = await handle.createWritable();
await writable.write(blob);
await writable.close();
alert('ファイルが保存されました!');
} catch (error) {
console.error('エラーが発生しました:', error);
alert(
`ファイルのダウンロード中にエラーが発生しました: ${error.message}\n` +
`元のファイル名: ${originalName}\n` +
`補正後のファイル名: ${suggestedName}`
);
}
});
};
const processLinks = () => {
const links = document.querySelectorAll('a[href^="blob:"]');
for (const link of links) {
if (!link.hasAttribute('data-blob-processed')) {
link.setAttribute('data-blob-processed', 'true'); // 重複処理を防ぐ
handleBlobLinks(link);
}
}
};
// 初回処理
processLinks();
// DOMの変化を監視
const observer = new MutationObserver(() => {
processLinks(); // DOM変化時に再度リンクを処理
});
observer.observe(document.body, { childList: true, subtree: true });
alert('Blobリンクの監視を開始しました!');
})();
</script>
<script>(function() {
// This logic is only for the "splash" screen.
// It's used to prevent a momentary white screen while the page is loading in dark mode.
var theme = 'system';
try {
var local = localStorage.getItem('P4.theme')
if (typeof local === 'string') theme = local;
} catch (e) { /* ignore */ }
if (theme === 'system') theme = window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light';
document.body.setAttribute('p4-splash-theme', theme);
})();</script><script src="js/p4.613592325c8f611b2ae4.js"></script></body></html> |