Skip to content

Commit 51796dc

Browse files
CSS fiddles
1 parent c788e6f commit 51796dc

File tree

3 files changed

+76
-20
lines changed

3 files changed

+76
-20
lines changed

src/app.html

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
<meta charset="utf-8" />
66
<link rel="icon" href="%sveltekit.assets%/favicon.png" />
77
<meta name="viewport" content="width=device-width, initial-scale=1" />
8+
<link rel= "stylesheet" href= "https://maxst.icons8.com/vue-static/landings/line-awesome/line-awesome/1.3.0/css/line-awesome.min.css" >
89
%sveltekit.head%
910
</head>
1011

@@ -15,7 +16,8 @@
1516
html, body {
1617
margin: 0;
1718
padding: 0;
18-
min-height: 100vh;
19+
height: 100vh;
20+
overflow: hidden;
1921
}
2022
</style>
2123
</body>

src/lib/index.ts

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,23 +4,26 @@ import { loadPyodide, type PyodideInterface } from 'pyodide';
44
/**
55
* Set up Pyodide and install pyhtml-enhanced.
66
*/
7-
async function pyodideInit() {
7+
async function pyodideInit(onStatusUpdate: (status: string) => void) {
8+
onStatusUpdate("Loading pyodide...");
89
const pyodide = await loadPyodide();
10+
onStatusUpdate("Loading micropip...");
911
await pyodide.loadPackage("micropip");
1012
const micropip = pyodide.pyimport("micropip");
13+
onStatusUpdate("micropip install pyhtml-enhanced");
1114
await micropip.install('pyhtml-enhanced');
1215
return pyodide;
1316
}
1417

1518
let pyodide: PyodideInterface;
1619

17-
export async function getPyodide() {
20+
export async function getPyodide(onStatusUpdate: (status: string) => void) {
1821
if (pyodide) return pyodide;
19-
pyodide = await pyodideInit();
22+
pyodide = await pyodideInit(onStatusUpdate);
2023
return pyodide;
2124
}
2225

2326
export async function evalPyHTML(pyhtml: string): Promise<string> {
24-
const pyodide = await getPyodide();
27+
const pyodide = await getPyodide(() => { });
2528
return pyodide.runPython(pyhtml) as string;
2629
}

src/routes/+page.svelte

Lines changed: 66 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,14 @@ p.html(
2727
2828
let pyodideReady = $state(false);
2929
30+
let pyodideStatus = $state('Please wait...');
31+
32+
function pyodideStatusUpdate(status: string) {
33+
pyodideStatus = status;
34+
}
35+
3036
onMount(async () => {
31-
await getPyodide();
37+
await getPyodide(pyodideStatusUpdate);
3238
console.log('Pyodide is ready');
3339
renderHtml();
3440
pyodideReady = true;
@@ -37,7 +43,6 @@ p.html(
3743

3844
<h1>Try out PyHTML</h1>
3945
{#if pyodideReady}
40-
<p class="status">Pyodide loaded successfully!</p>
4146
<main>
4247
<div class="editor">
4348
<h2>Write some code</h2>
@@ -59,7 +64,12 @@ p.html(
5964
</div>
6065
</main>
6166
{:else}
62-
<p class="status">Pyodide is loading...</p>
67+
<div class="status-outer">
68+
<div class="status-inner">
69+
<i class="las la-sync spin"></i>
70+
<p class="status-text">{pyodideStatus}</p>
71+
</div>
72+
</div>
6373
{/if}
6474

6575
<style>
@@ -68,28 +78,64 @@ p.html(
6878
}
6979
7080
h1 {
71-
text-align: center;
81+
margin: 0px;
82+
padding: 10px;
7283
}
73-
74-
.status {
84+
h1,
85+
h2 {
7586
text-align: center;
7687
}
7788
78-
main {
79-
display: grid;
80-
grid-template-areas:
81-
'editor preview'
82-
'editor html';
83-
grid-template-columns: 1fr 1fr;
84-
grid-template-rows: 1fr 1fr;
85-
89+
/* Status message when loading */
90+
.status-outer {
91+
width: 100%;
92+
display: flex;
93+
justify-content: center;
94+
}
95+
.status-inner {
96+
min-width: 300px;
97+
display: flex;
98+
gap: 10px;
99+
}
100+
.status-text {
86101
width: 100%;
87-
min-height: 100%;
102+
}
103+
.spin {
104+
font-size: 1.5rem;
105+
display: flex;
106+
align-items: center;
107+
justify-content: center;
108+
animation: rotating 2s linear infinite;
109+
}
110+
@keyframes rotating {
111+
from {
112+
transform: rotate(0deg);
113+
}
114+
to {
115+
transform: rotate(360deg);
116+
}
117+
}
118+
119+
/* Responsive design */
120+
@media only screen and (min-width: 1000px) {
121+
main {
122+
display: grid;
123+
grid-template-areas:
124+
'editor preview'
125+
'editor html';
126+
grid-template-columns: 1fr 1fr;
127+
grid-template-rows: 1fr 1fr;
128+
129+
width: 100%;
130+
height: 100%;
131+
}
88132
}
89133
90134
.editor {
91135
grid-area: editor;
92136
height: 100%;
137+
width: 100%;
138+
overflow: scroll;
93139
}
94140
95141
.preview {
@@ -104,5 +150,10 @@ p.html(
104150
.html {
105151
grid-area: html;
106152
height: 100%;
153+
width: 100%;
154+
}
155+
156+
.html pre {
157+
overflow: scroll;
107158
}
108159
</style>

0 commit comments

Comments
 (0)