Add multilingual language and systems learning tracks

This commit is contained in:
Admin committed 2026-11-01 15:46:21 +08:00
1 parent 07338189fc
commit d8d1c40118
844 files changed
+6061

No files matched your search

+9
View File
@@ -0,0 +1,9 @@
# Web Development · 2
[Agila University track](https://edu.agilaos.com/track.php?track=8&lang=en)
About 15 minutes per lesson. Predict, run, change, explain, then complete the check in University.
- [Lesson 1: Validate input and label controls](lesson-1/lesson.html)
- [Lesson 2: Render data as text](lesson-2/lesson.html)
- [Lesson 3: Ship a small tested website](lesson-3/lesson.html)
+5
View File
@@ -0,0 +1,5 @@
<!doctype html><html lang="en"><meta charset="utf-8"><title>Validate input and label controls</title><h1>Validate input and label controls</h1><p>15-minute session: read for 3 minutes, trace for 3, experiment for 7, and complete the check for 2. Spend longer whenever you need.</p><p>A visible label explains an input. The for attribute connects it to an id. Test empty input, 0, 1, 60, 61, and 1.5. HTML constraints help users but a real server must validate again because browser requests can be changed. This preview does not submit data to a server.</p><pre><code class="language-web">&lt;!doctype html&gt;
&lt;html lang=&quot;en&quot;&gt;&lt;meta charset=&quot;utf-8&quot;&gt;&lt;meta name=&quot;viewport&quot; content=&quot;width=device-width,initial-scale=1&quot;&gt;
&lt;title&gt;Agila study&lt;/title&gt;
&lt;main&gt;&lt;h1&gt;Study time&lt;/h1&gt;&lt;label for=&quot;minutes&quot;&gt;Minutes (1–60)&lt;/label&gt;&lt;input id=&quot;minutes&quot; type=&quot;number&quot; min=&quot;1&quot; max=&quot;60&quot;&gt;&lt;button id=&quot;check&quot;&gt;Check&lt;/button&gt;&lt;p id=&quot;result&quot; role=&quot;status&quot;&gt;&lt;/p&gt;&lt;/main&gt;
&lt;script&gt;document.getElementById(&quot;check&quot;).onclick=()=&gt;{const raw=document.getElementById(&quot;minutes&quot;).value;const n=Number(raw);document.getElementById(&quot;result&quot;).textContent=raw.trim()!==&quot;&quot;&amp;&amp;Number.isInteger(n)&amp;&amp;n&gt;=1&amp;&amp;n&lt;=60?&quot;Ready&quot;:&quot;Use a whole number from 1 to 60&quot;;};&lt;/script&gt;&lt;/html&gt;</code></pre><h3>Practice and evidence</h3><p>Keep three notes: your prediction, the actual result, and why they match or differ. The completion check grades understanding; the practice task builds skill.</p></html>
+5
View File
@@ -0,0 +1,5 @@
<!doctype html>
<html lang="en"><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1">
<title>Agila study</title>
<main><h1>Study time</h1><label for="minutes">Minutes (1–60)</label><input id="minutes" type="number" min="1" max="60"><button id="check">Check</button><p id="result" role="status"></p></main>
<script>document.getElementById("check").onclick=()=>{const raw=document.getElementById("minutes").value;const n=Number(raw);document.getElementById("result").textContent=raw.trim()!==""&&Number.isInteger(n)&&n>=1&&n<=60?"Ready":"Use a whole number from 1 to 60";};</script></html>
+5
View File
@@ -0,0 +1,5 @@
<!doctype html><html lang="en"><meta charset="utf-8"><title>Render data as text</title><h1>Render data as text</h1><p>15-minute session: read for 3 minutes, trace for 3, experiment for 7, and complete the check for 2. Spend longer whenever you need.</p><p>The third task contains characters that resemble HTML. textContent displays those characters as text. Replacing it with innerHTML would interpret markup and can create an injection risk with untrusted data. Add an item containing an ampersand and angle brackets. Verify that the visible result preserves the literal text.</p><pre><code class="language-web">&lt;!doctype html&gt;
&lt;html lang=&quot;en&quot;&gt;&lt;meta charset=&quot;utf-8&quot;&gt;&lt;meta name=&quot;viewport&quot; content=&quot;width=device-width,initial-scale=1&quot;&gt;
&lt;title&gt;Agila study&lt;/title&gt;
&lt;main&gt;&lt;h1&gt;Tasks&lt;/h1&gt;&lt;ul id=&quot;tasks&quot;&gt;&lt;/ul&gt;&lt;/main&gt;
&lt;script&gt;const tasks=[&quot;Read&quot;,&quot;Test&quot;,&quot;&lt;strong&gt;Explain&lt;/strong&gt;&quot;];for(const text of tasks){const li=document.createElement(&quot;li&quot;);li.textContent=text;document.getElementById(&quot;tasks&quot;).append(li);}&lt;/script&gt;&lt;/html&gt;</code></pre><h3>Practice and evidence</h3><p>Keep three notes: your prediction, the actual result, and why they match or differ. The completion check grades understanding; the practice task builds skill.</p></html>
+5
View File
@@ -0,0 +1,5 @@
<!doctype html>
<html lang="en"><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1">
<title>Agila study</title>
<main><h1>Tasks</h1><ul id="tasks"></ul></main>
<script>const tasks=["Read","Test","<strong>Explain</strong>"];for(const text of tasks){const li=document.createElement("li");li.textContent=text;document.getElementById("tasks").append(li);}</script></html>
+5
View File
@@ -0,0 +1,5 @@
<!doctype html><html lang="en"><meta charset="utf-8"><title>Ship a small tested website</title><h1>Ship a small tested website</h1><p>15-minute session: read for 3 minutes, trace for 3, experiment for 7, and complete the check for 2. Spend longer whenever you need.</p><p>Combine the semantic page, responsive card, validated input, and counter into a study planner. The sample checks only its remaining-work function. Add tests for empty input and keyboard use, then deliberately break one condition to ensure a test fails. Save your source on Forge. Publishing needs a host, domain, HTTPS, and a rollback plan; this isolated preview is your workshop.</p><pre><code class="language-web">&lt;!doctype html&gt;
&lt;html lang=&quot;en&quot;&gt;&lt;meta charset=&quot;utf-8&quot;&gt;&lt;meta name=&quot;viewport&quot; content=&quot;width=device-width,initial-scale=1&quot;&gt;
&lt;title&gt;Agila study&lt;/title&gt;
&lt;main&gt;&lt;h1&gt;Planner checks&lt;/h1&gt;&lt;pre id=&quot;result&quot;&gt;&lt;/pre&gt;&lt;/main&gt;
&lt;script&gt;function remaining(total,done){return Math.max(0,total-done)}const cases=[[4,1,3],[4,4,0],[4,5,0],[0,0,0]];document.getElementById(&quot;result&quot;).textContent=cases.map(([t,d,want])=&gt;`${t},${d}: ${remaining(t,d)===want?&quot;PASS&quot;:&quot;FAIL&quot;}`).join(&quot;\n&quot;);&lt;/script&gt;&lt;/html&gt;</code></pre><h3>Practice and evidence</h3><p>Keep three notes: your prediction, the actual result, and why they match or differ. The completion check grades understanding; the practice task builds skill.</p></html>
+5
View File
@@ -0,0 +1,5 @@
<!doctype html>
<html lang="en"><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1">
<title>Agila study</title>
<main><h1>Planner checks</h1><pre id="result"></pre></main>
<script>function remaining(total,done){return Math.max(0,total-done)}const cases=[[4,1,3],[4,4,0],[4,5,0],[0,0,0]];document.getElementById("result").textContent=cases.map(([t,d,want])=>`${t},${d}: ${remaining(t,d)===want?"PASS":"FAIL"}`).join("\n");</script></html>