mirror of
https://github.com/HananoshikaYomaru/openfreebooks.git
synced 2026-11-12 20:45:52 +00:00
Remove English curriculum content and associated styles: Deleted the English curriculum files, including the main index, reading comprehension foundations, and related styles. Updated catalog JSON to remove references to English chapters and contributors, ensuring a clean slate for future curriculum updates.
This commit is contained in:
parent
81c6614722
commit
f28ad660dd
13 changed files with 452 additions and 280 deletions
|
|
@ -1,5 +0,0 @@
|
|||
+++
|
||||
title = "English"
|
||||
description = "Browse English chapters in the curriculum catalog."
|
||||
sort_by = "weight"
|
||||
+++
|
||||
|
|
@ -1,60 +0,0 @@
|
|||
+++
|
||||
title = "Reading comprehension foundations"
|
||||
description = "Find the main idea, key details, and evidence in short texts."
|
||||
template = "chapter.html"
|
||||
weight = 1
|
||||
[extra]
|
||||
subject = "english"
|
||||
chapter_id = "reading-comprehension-foundations"
|
||||
strand = "Reading & Writing Foundations"
|
||||
+++
|
||||
|
||||
<div class="book-prose">
|
||||
<p>
|
||||
Reading comprehension means understanding what a text says directly and what it suggests
|
||||
indirectly. In this chapter you will practice spotting the
|
||||
<span class="english-key-term">main idea</span>, finding
|
||||
<span class="english-key-term">supporting details</span>, and selecting
|
||||
<span class="english-key-term">text evidence</span>.
|
||||
</p>
|
||||
|
||||
<h2 id="main-idea" class="book-prose__heading">Main idea and key details</h2>
|
||||
<p>
|
||||
The <strong>main idea</strong> is the most important message in a paragraph or passage.
|
||||
<strong>Key details</strong> are specific facts or examples that support that message.
|
||||
</p>
|
||||
|
||||
<div class="book-callout" role="note">
|
||||
<p class="book-callout__label">Quick strategy</p>
|
||||
<p>
|
||||
Ask: “If I had to summarize this paragraph in one sentence, what would I say?” Then check
|
||||
which details in the text prove your sentence.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<h2 id="evidence" class="book-prose__heading">Use evidence, not guesses</h2>
|
||||
<p>
|
||||
Good answers point to exact words or phrases in the passage. You can quote directly or
|
||||
paraphrase, but your answer should always connect back to the text.
|
||||
</p>
|
||||
|
||||
<details class="book-question">
|
||||
<summary class="book-question__prompt">Checkpoint: main idea</summary>
|
||||
<div class="book-question__solution">
|
||||
<p>
|
||||
Read this sentence: “After weeks of practice, the choir finally sang in harmony during the
|
||||
final rehearsal.” What is the main idea, and which words are the strongest evidence?
|
||||
</p>
|
||||
</div>
|
||||
</details>
|
||||
|
||||
<details class="book-question">
|
||||
<summary class="book-question__prompt">Checkpoint: evidence</summary>
|
||||
<div class="book-question__solution">
|
||||
<p>
|
||||
A student writes: “The character is brave.” Improve this answer by adding one short quote
|
||||
from the text and explaining how that quote proves bravery.
|
||||
</p>
|
||||
</div>
|
||||
</details>
|
||||
</div>
|
||||
|
|
@ -1,49 +0,0 @@
|
|||
<div class="book-prose">
|
||||
<p>
|
||||
Reading comprehension means understanding what a text says directly and what it suggests
|
||||
indirectly. In this chapter you will practice spotting the
|
||||
<span class="english-key-term">main idea</span>, finding
|
||||
<span class="english-key-term">supporting details</span>, and selecting
|
||||
<span class="english-key-term">text evidence</span>.
|
||||
</p>
|
||||
|
||||
<h2 id="main-idea" class="book-prose__heading">Main idea and key details</h2>
|
||||
<p>
|
||||
The <strong>main idea</strong> is the most important message in a paragraph or passage.
|
||||
<strong>Key details</strong> are specific facts or examples that support that message.
|
||||
</p>
|
||||
|
||||
<div class="book-callout" role="note">
|
||||
<p class="book-callout__label">Quick strategy</p>
|
||||
<p>
|
||||
Ask: “If I had to summarize this paragraph in one sentence, what would I say?” Then check
|
||||
which details in the text prove your sentence.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<h2 id="evidence" class="book-prose__heading">Use evidence, not guesses</h2>
|
||||
<p>
|
||||
Good answers point to exact words or phrases in the passage. You can quote directly or
|
||||
paraphrase, but your answer should always connect back to the text.
|
||||
</p>
|
||||
|
||||
<details class="book-question">
|
||||
<summary class="book-question__prompt">Checkpoint: main idea</summary>
|
||||
<div class="book-question__solution">
|
||||
<p>
|
||||
Read this sentence: “After weeks of practice, the choir finally sang in harmony during the
|
||||
final rehearsal.” What is the main idea, and which words are the strongest evidence?
|
||||
</p>
|
||||
</div>
|
||||
</details>
|
||||
|
||||
<details class="book-question">
|
||||
<summary class="book-question__prompt">Checkpoint: evidence</summary>
|
||||
<div class="book-question__solution">
|
||||
<p>
|
||||
A student writes: “The character is brave.” Improve this answer by adding one short quote
|
||||
from the text and explaining how that quote proves bravery.
|
||||
</p>
|
||||
</div>
|
||||
</details>
|
||||
</div>
|
||||
|
|
@ -1,10 +0,0 @@
|
|||
// Shared styles for English chapters.
|
||||
// Keep chapter-specific rules in each chapter folder's chapter.scss.
|
||||
|
||||
.english-key-term {
|
||||
padding: 0.05rem 0.32rem;
|
||||
border-radius: 4px;
|
||||
background: color-mix(in srgb, var(--accent) 12%, transparent);
|
||||
font-family: var(--mono);
|
||||
font-size: 0.85em;
|
||||
}
|
||||
|
|
@ -3,9 +3,36 @@
|
|||
"subtitle": "Browse chapters by subject and curriculum",
|
||||
"curriculums": ["Foundation", "DSE", "IB", "A-Level", "AP", "IGCSE", "Common Core"],
|
||||
"subjects": [
|
||||
{ "id": "math", "name": "Mathematics", "banner": "/catalog/banners/math.webp" },
|
||||
{ "id": "english", "name": "English" },
|
||||
{ "id": "physics", "name": "Physics", "banner": "/catalog/banners/physics.jpg" },
|
||||
{
|
||||
"id": "math",
|
||||
"name": "Mathematics",
|
||||
"banner": "/catalog/banners/math.webp",
|
||||
"contributors": [
|
||||
{
|
||||
"id": "man-lung-yeung",
|
||||
"name": "Man Lung Yeung",
|
||||
"avatar": "/contributors/manlung.png",
|
||||
"job_title": "EdTech specialist / software engineer",
|
||||
"education": "BEng in Computer Science (HKUST) + BBA (HKUST)",
|
||||
"contributions": ["Project Creator", "Math textbook", "Physics textbook"]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "physics",
|
||||
"name": "Physics",
|
||||
"banner": "/catalog/banners/physics.jpg",
|
||||
"contributors": [
|
||||
{
|
||||
"id": "man-lung-yeung",
|
||||
"name": "Man Lung Yeung",
|
||||
"avatar": "/contributors/manlung.png",
|
||||
"job_title": "EdTech specialist / software engineer",
|
||||
"education": "BEng in Computer Science (HKUST) + BBA (HKUST)",
|
||||
"contributions": ["Project Creator", "Math textbook", "Physics textbook"]
|
||||
}
|
||||
]
|
||||
},
|
||||
{ "id": "science", "name": "Science" },
|
||||
{ "id": "humanities", "name": "Humanities" },
|
||||
{ "id": "computing", "name": "Computing" }
|
||||
|
|
|
|||
|
|
@ -34,11 +34,21 @@ export type CatalogGraph = {
|
|||
edges: CatalogGraphEdge[];
|
||||
};
|
||||
|
||||
export type CatalogSubjectContributor = {
|
||||
id: string;
|
||||
name: string;
|
||||
avatar: string;
|
||||
job_title?: string;
|
||||
education?: string;
|
||||
contributions?: string[];
|
||||
};
|
||||
|
||||
export type CatalogSubject = {
|
||||
id: string;
|
||||
name: string;
|
||||
/** Root-relative URL, e.g. /catalog/banners/math.webp */
|
||||
banner?: string;
|
||||
contributors?: CatalogSubjectContributor[];
|
||||
strands: CatalogStrand[];
|
||||
graph?: CatalogGraph;
|
||||
};
|
||||
|
|
|
|||
|
|
@ -1,39 +0,0 @@
|
|||
{
|
||||
"title": "English",
|
||||
"intro": "Build reading, writing, speaking, and analysis skills through progressive chapter pathways.",
|
||||
"graph": {
|
||||
"edges": []
|
||||
},
|
||||
"strands": [
|
||||
{
|
||||
"id": "reading-writing-foundations",
|
||||
"title": "Reading & Writing Foundations",
|
||||
"chapters": [
|
||||
{
|
||||
"slug": "reading-comprehension-foundations",
|
||||
"title": "Reading comprehension foundations",
|
||||
"description": "Find main ideas, supporting details, and text evidence in short passages.",
|
||||
"status": "live",
|
||||
"curriculumCoverage": {
|
||||
"Foundation": "core",
|
||||
"IGCSE": "core",
|
||||
"Common Core": "core",
|
||||
"IB": "related"
|
||||
}
|
||||
},
|
||||
{
|
||||
"slug": "paragraph-writing-basics",
|
||||
"title": "Paragraph writing basics",
|
||||
"description": "Write focused paragraphs with a clear topic sentence, evidence, and explanation.",
|
||||
"status": "planned",
|
||||
"curriculumCoverage": {
|
||||
"Foundation": "core",
|
||||
"IGCSE": "core",
|
||||
"Common Core": "core",
|
||||
"IB": "related"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
@ -8,6 +8,7 @@ import type {
|
|||
CatalogChapter,
|
||||
CatalogData,
|
||||
CatalogStrand,
|
||||
CatalogSubjectContributor,
|
||||
CatalogSubject,
|
||||
CatalogViewMode,
|
||||
} from "../../../data/catalog.types";
|
||||
|
|
@ -33,6 +34,7 @@ function normalizeChapter(chapter: CatalogChapter): CatalogChapter {
|
|||
function normalizeSubject(subject: CatalogSubject): CatalogSubject {
|
||||
return {
|
||||
...subject,
|
||||
contributors: subject.contributors ?? [],
|
||||
strands: (subject.strands ?? []).map((strand) => ({
|
||||
...strand,
|
||||
chapters: (strand.chapters ?? []).map(normalizeChapter),
|
||||
|
|
@ -94,6 +96,20 @@ function syncUrl(subjectId: string, viewMode: CatalogViewMode) {
|
|||
window.history.replaceState(null, "", url);
|
||||
}
|
||||
|
||||
function openDialogById(id: string) {
|
||||
const dialog = document.getElementById(id);
|
||||
if (dialog instanceof HTMLDialogElement) {
|
||||
dialog.showModal();
|
||||
}
|
||||
}
|
||||
|
||||
function closeDialogById(id: string) {
|
||||
const dialog = document.getElementById(id);
|
||||
if (dialog instanceof HTMLDialogElement) {
|
||||
dialog.close();
|
||||
}
|
||||
}
|
||||
|
||||
export function CatalogApp() {
|
||||
const data = readCatalogData();
|
||||
if (!data) {
|
||||
|
|
@ -141,6 +157,37 @@ export function CatalogApp() {
|
|||
return `Showing ${count} ${filterText} chapter${count === 1 ? "" : "s"}`;
|
||||
});
|
||||
|
||||
const subjectContributors = createMemo<CatalogSubjectContributor[]>(
|
||||
() => currentSubject()?.contributors ?? []
|
||||
);
|
||||
|
||||
const contributorsPickerDialogId = createMemo(
|
||||
() => `catalog-contributors-picker-dialog-${currentSubjectId()}`
|
||||
);
|
||||
|
||||
const contributorDialogId = (contributorId: string) =>
|
||||
`catalog-contributor-dialog-${currentSubjectId()}-${contributorId}`;
|
||||
|
||||
const openContributorsPickerDialog = () => {
|
||||
openDialogById(contributorsPickerDialogId());
|
||||
};
|
||||
|
||||
const openContributorDialog = (contributorId: string) => {
|
||||
openDialogById(contributorDialogId(contributorId));
|
||||
};
|
||||
|
||||
const openContributorFromPicker = (contributorId: string) => {
|
||||
closeDialogById(contributorsPickerDialogId());
|
||||
openDialogById(contributorDialogId(contributorId));
|
||||
};
|
||||
|
||||
const closeContributorsDialogOnBackdrop = (event: MouseEvent) => {
|
||||
if (!(event.currentTarget instanceof HTMLDialogElement)) return;
|
||||
if (event.target === event.currentTarget) {
|
||||
event.currentTarget.close();
|
||||
}
|
||||
};
|
||||
|
||||
const selectSubject = (subjectId: string) => {
|
||||
if (subjectId !== "math" && viewMode() === "compare") {
|
||||
setViewMode("linear");
|
||||
|
|
@ -244,6 +291,151 @@ export function CatalogApp() {
|
|||
<div class="catalog-header__intro">
|
||||
<h1 class="catalog-header__title">{currentSubject()?.name ?? "Catalog"}</h1>
|
||||
<p class="catalog-header__stats">{statsLabel()}</p>
|
||||
<Show when={subjectContributors().length > 0}>
|
||||
<div class="catalog-subject-contributors">
|
||||
<ul
|
||||
class="catalog-avatar-group"
|
||||
role="list"
|
||||
aria-label={`${currentSubject()?.name ?? "Subject"} contributors`}
|
||||
>
|
||||
<For each={subjectContributors()}>
|
||||
{(person) => (
|
||||
<li class="catalog-avatar-group__item">
|
||||
<button
|
||||
type="button"
|
||||
class="catalog-avatar-group__button"
|
||||
aria-label={`View contributor: ${person.name}`}
|
||||
aria-haspopup="dialog"
|
||||
aria-controls={contributorDialogId(person.id)}
|
||||
onClick={() => openContributorDialog(person.id)}
|
||||
>
|
||||
<img
|
||||
src={person.avatar}
|
||||
alt={person.name}
|
||||
width={36}
|
||||
height={36}
|
||||
loading="lazy"
|
||||
decoding="async"
|
||||
/>
|
||||
</button>
|
||||
</li>
|
||||
)}
|
||||
</For>
|
||||
</ul>
|
||||
<button
|
||||
type="button"
|
||||
class="catalog-subject-contributors__info"
|
||||
aria-haspopup="dialog"
|
||||
aria-controls={contributorsPickerDialogId()}
|
||||
onClick={openContributorsPickerDialog}
|
||||
>
|
||||
Contributors
|
||||
</button>
|
||||
<dialog
|
||||
id={contributorsPickerDialogId()}
|
||||
class="contributor-dialog catalog-contributors-dialog"
|
||||
onClick={closeContributorsDialogOnBackdrop}
|
||||
>
|
||||
<form
|
||||
method="dialog"
|
||||
class="contributor-dialog-panel catalog-contributors-dialog__panel"
|
||||
>
|
||||
<button
|
||||
type="submit"
|
||||
class="contributor-dialog-close"
|
||||
aria-label="Close contributors dialog"
|
||||
>
|
||||
×
|
||||
</button>
|
||||
<div class="contributor-dialog-header">
|
||||
<h2 class="catalog-contributors-dialog__title">
|
||||
{currentSubject()?.name} contributors
|
||||
</h2>
|
||||
</div>
|
||||
<div class="catalog-contributors-dialog__contributions">
|
||||
<span class="contributor-meta-label">Contributors</span>
|
||||
<ul class="catalog-contributors-dialog__list" role="list">
|
||||
<For each={subjectContributors()}>
|
||||
{(person) => (
|
||||
<li>
|
||||
<button
|
||||
type="button"
|
||||
class="catalog-contributors-dialog__item"
|
||||
aria-controls={contributorDialogId(person.id)}
|
||||
onClick={() => openContributorFromPicker(person.id)}
|
||||
>
|
||||
<img
|
||||
class="catalog-contributors-dialog__avatar"
|
||||
src={person.avatar}
|
||||
alt=""
|
||||
width={40}
|
||||
height={40}
|
||||
loading="lazy"
|
||||
decoding="async"
|
||||
/>
|
||||
<span>{person.name}</span>
|
||||
</button>
|
||||
</li>
|
||||
)}
|
||||
</For>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="contributor-dialog-connect" />
|
||||
</form>
|
||||
</dialog>
|
||||
<For each={subjectContributors()}>
|
||||
{(person) => (
|
||||
<dialog
|
||||
id={contributorDialogId(person.id)}
|
||||
class="contributor-dialog catalog-contributors-dialog"
|
||||
onClick={closeContributorsDialogOnBackdrop}
|
||||
>
|
||||
<form method="dialog" class="contributor-dialog-panel">
|
||||
<button
|
||||
type="submit"
|
||||
class="contributor-dialog-close"
|
||||
aria-label={`Close ${person.name} dialog`}
|
||||
>
|
||||
×
|
||||
</button>
|
||||
<div class="contributor-dialog-header">
|
||||
<img
|
||||
class="contributor-dialog-avatar"
|
||||
src={person.avatar}
|
||||
alt=""
|
||||
width={80}
|
||||
height={80}
|
||||
decoding="async"
|
||||
/>
|
||||
<div class="contributor-dialog-identity">
|
||||
<h2 class="contributor-dialog-name">{person.name}</h2>
|
||||
<Show when={person.job_title}>
|
||||
<p class="contributor-dialog-job">{person.job_title}</p>
|
||||
</Show>
|
||||
</div>
|
||||
</div>
|
||||
<Show when={person.education}>
|
||||
<p class="contributor-dialog-meta">
|
||||
<span class="contributor-meta-label">Education</span>
|
||||
{person.education}
|
||||
</p>
|
||||
</Show>
|
||||
<Show when={person.contributions && person.contributions.length > 0}>
|
||||
<div class="contributor-dialog-contributions">
|
||||
<span class="contributor-meta-label">Contributes</span>
|
||||
<ul class="contributor-contribution-list" role="list">
|
||||
<For each={person.contributions}>
|
||||
{(item) => <li>{item}</li>}
|
||||
</For>
|
||||
</ul>
|
||||
</div>
|
||||
</Show>
|
||||
</form>
|
||||
</dialog>
|
||||
)}
|
||||
</For>
|
||||
</div>
|
||||
</Show>
|
||||
</div>
|
||||
<div class="catalog-view-toggle" role="tablist" aria-label="Chapter layout">
|
||||
<button
|
||||
|
|
|
|||
164
static/feed.xml
164
static/feed.xml
|
|
@ -4,119 +4,119 @@
|
|||
<title>Open Free Books</title>
|
||||
<link>https://openfreebooks.org/</link>
|
||||
<description>Recent updates to Open Free Books pages and live chapters.</description>
|
||||
<lastBuildDate>Thu, 21 May 2026 16:43:43 GMT</lastBuildDate>
|
||||
<lastBuildDate>Thu, 21 May 2026 16:54:30 GMT</lastBuildDate>
|
||||
<item>
|
||||
<title>Loci</title>
|
||||
<link>https://openfreebooks.org/math/loci/</link>
|
||||
<guid isPermaLink="true">https://openfreebooks.org/math/loci/</guid>
|
||||
<pubDate>Thu, 21 May 2026 16:43:43 GMT</pubDate>
|
||||
<description>Describe and construct loci in the plane, linking geometric constraints to algebraic equations.</description>
|
||||
<title>Advanced trigonometry</title>
|
||||
<link>https://openfreebooks.org/math/advanced-trigonometry/</link>
|
||||
<guid isPermaLink="true">https://openfreebooks.org/math/advanced-trigonometry/</guid>
|
||||
<pubDate>Thu, 21 May 2026 16:54:30 GMT</pubDate>
|
||||
<description>Use sine and cosine rules, radians, and trigonometric graphs in 2D and 3D applications.</description>
|
||||
</item>
|
||||
<item>
|
||||
<title>Basic probability</title>
|
||||
<link>https://openfreebooks.org/math/basic-probability/</link>
|
||||
<guid isPermaLink="true">https://openfreebooks.org/math/basic-probability/</guid>
|
||||
<pubDate>Thu, 21 May 2026 16:54:30 GMT</pubDate>
|
||||
<description>Calculate theoretical and experimental probabilities for simple events and complements.</description>
|
||||
</item>
|
||||
<item>
|
||||
<title>Properties of circles</title>
|
||||
<link>https://openfreebooks.org/math/circle-properties/</link>
|
||||
<guid isPermaLink="true">https://openfreebooks.org/math/circle-properties/</guid>
|
||||
<pubDate>Thu, 21 May 2026 16:54:30 GMT</pubDate>
|
||||
<description>Apply chord, tangent, and angle theorems in circles to prove results and solve geometry problems.</description>
|
||||
</item>
|
||||
<item>
|
||||
<title>Congruence & similarity</title>
|
||||
<link>https://openfreebooks.org/math/congruence-similarity/</link>
|
||||
<guid isPermaLink="true">https://openfreebooks.org/math/congruence-similarity/</guid>
|
||||
<pubDate>Thu, 21 May 2026 16:54:30 GMT</pubDate>
|
||||
<description>Apply congruence and similarity criteria to justify properties of triangles and scale figures.</description>
|
||||
</item>
|
||||
<item>
|
||||
<title>Coordinate geometry of circles</title>
|
||||
<link>https://openfreebooks.org/math/coordinate-circles/</link>
|
||||
<guid isPermaLink="true">https://openfreebooks.org/math/coordinate-circles/</guid>
|
||||
<pubDate>Thu, 21 May 2026 16:54:30 GMT</pubDate>
|
||||
<description>Find equations of circles, tangents, and intersections using coordinate methods and distance.</description>
|
||||
</item>
|
||||
<item>
|
||||
<title>Coordinate geometry foundations</title>
|
||||
<link>https://openfreebooks.org/math/coordinate-geometry-foundations/</link>
|
||||
<guid isPermaLink="true">https://openfreebooks.org/math/coordinate-geometry-foundations/</guid>
|
||||
<pubDate>Thu, 21 May 2026 16:54:30 GMT</pubDate>
|
||||
<description>Plot points, find distances and midpoints, and work with slopes of lines in the Cartesian plane.</description>
|
||||
</item>
|
||||
<item>
|
||||
<title>Deductive geometry</title>
|
||||
<link>https://openfreebooks.org/math/deductive-geometry/</link>
|
||||
<guid isPermaLink="true">https://openfreebooks.org/math/deductive-geometry/</guid>
|
||||
<pubDate>Thu, 21 May 2026 16:54:30 GMT</pubDate>
|
||||
<description>Prove angle and side relationships for intersecting lines, triangles, and polygons.</description>
|
||||
</item>
|
||||
<item>
|
||||
<title>Introduction to trigonometry</title>
|
||||
<link>https://openfreebooks.org/math/introduction-trigonometry/</link>
|
||||
<guid isPermaLink="true">https://openfreebooks.org/math/introduction-trigonometry/</guid>
|
||||
<pubDate>Thu, 21 May 2026 16:43:43 GMT</pubDate>
|
||||
<pubDate>Thu, 21 May 2026 16:54:30 GMT</pubDate>
|
||||
<description>Define sine, cosine, and tangent ratios and solve right-angled triangle problems.</description>
|
||||
</item>
|
||||
<item>
|
||||
<title>Permutations, combinations & probability</title>
|
||||
<link>https://openfreebooks.org/math/permutations-combinations-probability/</link>
|
||||
<guid isPermaLink="true">https://openfreebooks.org/math/permutations-combinations-probability/</guid>
|
||||
<pubDate>Thu, 21 May 2026 16:43:43 GMT</pubDate>
|
||||
<description>Count outcomes with permutations and combinations, then compute probabilities in finite sample spaces.</description>
|
||||
<title>Loci</title>
|
||||
<link>https://openfreebooks.org/math/loci/</link>
|
||||
<guid isPermaLink="true">https://openfreebooks.org/math/loci/</guid>
|
||||
<pubDate>Thu, 21 May 2026 16:54:30 GMT</pubDate>
|
||||
<description>Describe and construct loci in the plane, linking geometric constraints to algebraic equations.</description>
|
||||
</item>
|
||||
<item>
|
||||
<title>Measures of dispersion</title>
|
||||
<link>https://openfreebooks.org/math/measures-dispersion/</link>
|
||||
<guid isPermaLink="true">https://openfreebooks.org/math/measures-dispersion/</guid>
|
||||
<pubDate>Thu, 21 May 2026 16:54:30 GMT</pubDate>
|
||||
<description>Interpret range, interquartile range, variance, and standard deviation for comparing data sets.</description>
|
||||
</item>
|
||||
<item>
|
||||
<title>Mensuration in 3D</title>
|
||||
<link>https://openfreebooks.org/math/mensuration-3d/</link>
|
||||
<guid isPermaLink="true">https://openfreebooks.org/math/mensuration-3d/</guid>
|
||||
<pubDate>Thu, 21 May 2026 16:43:43 GMT</pubDate>
|
||||
<pubDate>Thu, 21 May 2026 16:54:30 GMT</pubDate>
|
||||
<description>Find volumes and surface areas of prisms, cylinders, pyramids, cones, and spheres.</description>
|
||||
</item>
|
||||
<item>
|
||||
<title>Normal distribution & z-scores</title>
|
||||
<link>https://openfreebooks.org/math/normal-distribution-z-scores/</link>
|
||||
<guid isPermaLink="true">https://openfreebooks.org/math/normal-distribution-z-scores/</guid>
|
||||
<pubDate>Thu, 21 May 2026 16:43:43 GMT</pubDate>
|
||||
<pubDate>Thu, 21 May 2026 16:54:30 GMT</pubDate>
|
||||
<description>Model continuous data with the normal curve, standardise with z-scores, and read probabilities from tables.</description>
|
||||
</item>
|
||||
<item>
|
||||
<title>Coordinate geometry foundations</title>
|
||||
<link>https://openfreebooks.org/math/coordinate-geometry-foundations/</link>
|
||||
<guid isPermaLink="true">https://openfreebooks.org/math/coordinate-geometry-foundations/</guid>
|
||||
<pubDate>Thu, 21 May 2026 16:43:43 GMT</pubDate>
|
||||
<description>Plot points, find distances and midpoints, and work with slopes of lines in the Cartesian plane.</description>
|
||||
<title>Permutations, combinations & probability</title>
|
||||
<link>https://openfreebooks.org/math/permutations-combinations-probability/</link>
|
||||
<guid isPermaLink="true">https://openfreebooks.org/math/permutations-combinations-probability/</guid>
|
||||
<pubDate>Thu, 21 May 2026 16:54:30 GMT</pubDate>
|
||||
<description>Count outcomes with permutations and combinations, then compute probabilities in finite sample spaces.</description>
|
||||
</item>
|
||||
<item>
|
||||
<title>Measures of dispersion</title>
|
||||
<link>https://openfreebooks.org/math/measures-dispersion/</link>
|
||||
<guid isPermaLink="true">https://openfreebooks.org/math/measures-dispersion/</guid>
|
||||
<pubDate>Thu, 21 May 2026 16:43:43 GMT</pubDate>
|
||||
<description>Interpret range, interquartile range, variance, and standard deviation for comparing data sets.</description>
|
||||
</item>
|
||||
<item>
|
||||
<title>Advanced trigonometry</title>
|
||||
<link>https://openfreebooks.org/math/advanced-trigonometry/</link>
|
||||
<guid isPermaLink="true">https://openfreebooks.org/math/advanced-trigonometry/</guid>
|
||||
<pubDate>Thu, 21 May 2026 16:43:43 GMT</pubDate>
|
||||
<description>Use sine and cosine rules, radians, and trigonometric graphs in 2D and 3D applications.</description>
|
||||
</item>
|
||||
<item>
|
||||
<title>Properties of circles</title>
|
||||
<link>https://openfreebooks.org/math/circle-properties/</link>
|
||||
<guid isPermaLink="true">https://openfreebooks.org/math/circle-properties/</guid>
|
||||
<pubDate>Thu, 21 May 2026 16:43:43 GMT</pubDate>
|
||||
<description>Apply chord, tangent, and angle theorems in circles to prove results and solve geometry problems.</description>
|
||||
</item>
|
||||
<item>
|
||||
<title>Deductive geometry</title>
|
||||
<link>https://openfreebooks.org/math/deductive-geometry/</link>
|
||||
<guid isPermaLink="true">https://openfreebooks.org/math/deductive-geometry/</guid>
|
||||
<pubDate>Thu, 21 May 2026 16:43:43 GMT</pubDate>
|
||||
<description>Prove angle and side relationships for intersecting lines, triangles, and polygons.</description>
|
||||
</item>
|
||||
<item>
|
||||
<title>Coordinate geometry of circles</title>
|
||||
<link>https://openfreebooks.org/math/coordinate-circles/</link>
|
||||
<guid isPermaLink="true">https://openfreebooks.org/math/coordinate-circles/</guid>
|
||||
<pubDate>Thu, 21 May 2026 16:43:43 GMT</pubDate>
|
||||
<description>Find equations of circles, tangents, and intersections using coordinate methods and distance.</description>
|
||||
</item>
|
||||
<item>
|
||||
<title>Basic probability</title>
|
||||
<link>https://openfreebooks.org/math/basic-probability/</link>
|
||||
<guid isPermaLink="true">https://openfreebooks.org/math/basic-probability/</guid>
|
||||
<pubDate>Thu, 21 May 2026 16:43:43 GMT</pubDate>
|
||||
<description>Calculate theoretical and experimental probabilities for simple events and complements.</description>
|
||||
<title>Pythagoras' theorem</title>
|
||||
<link>https://openfreebooks.org/math/pythagoras-theorem/</link>
|
||||
<guid isPermaLink="true">https://openfreebooks.org/math/pythagoras-theorem/</guid>
|
||||
<pubDate>Thu, 21 May 2026 16:54:30 GMT</pubDate>
|
||||
<description>Use Pythagoras' theorem and its converse in 2D problems and coordinate settings.</description>
|
||||
</item>
|
||||
<item>
|
||||
<title>Charts & averages</title>
|
||||
<link>https://openfreebooks.org/math/statistical-charts-averages/</link>
|
||||
<guid isPermaLink="true">https://openfreebooks.org/math/statistical-charts-averages/</guid>
|
||||
<pubDate>Thu, 21 May 2026 16:43:43 GMT</pubDate>
|
||||
<pubDate>Thu, 21 May 2026 16:54:30 GMT</pubDate>
|
||||
<description>Organise data with tables and charts and calculate mean, median, and mode.</description>
|
||||
</item>
|
||||
<item>
|
||||
<title>Statistical literacy</title>
|
||||
<link>https://openfreebooks.org/math/statistical-literacy/</link>
|
||||
<guid isPermaLink="true">https://openfreebooks.org/math/statistical-literacy/</guid>
|
||||
<pubDate>Thu, 21 May 2026 16:43:43 GMT</pubDate>
|
||||
<pubDate>Thu, 21 May 2026 16:54:30 GMT</pubDate>
|
||||
<description>Evaluate claims in media and research: sampling bias, correlation versus causation, and misleading charts.</description>
|
||||
</item>
|
||||
<item>
|
||||
<title>Congruence & similarity</title>
|
||||
<link>https://openfreebooks.org/math/congruence-similarity/</link>
|
||||
<guid isPermaLink="true">https://openfreebooks.org/math/congruence-similarity/</guid>
|
||||
<pubDate>Thu, 21 May 2026 16:43:43 GMT</pubDate>
|
||||
<description>Apply congruence and similarity criteria to justify properties of triangles and scale figures.</description>
|
||||
</item>
|
||||
<item>
|
||||
<title>Pythagoras' theorem</title>
|
||||
<link>https://openfreebooks.org/math/pythagoras-theorem/</link>
|
||||
<guid isPermaLink="true">https://openfreebooks.org/math/pythagoras-theorem/</guid>
|
||||
<pubDate>Thu, 21 May 2026 16:43:43 GMT</pubDate>
|
||||
<description>Use Pythagoras' theorem and its converse in 2D problems and coordinate settings.</description>
|
||||
</item>
|
||||
<item>
|
||||
<title>Complex numbers</title>
|
||||
<link>https://openfreebooks.org/math/complex-numbers/</link>
|
||||
|
|
@ -201,20 +201,6 @@
|
|||
<pubDate>Thu, 21 May 2026 05:05:38 GMT</pubDate>
|
||||
<description>Add, subtract, multiply, and divide whole numbers using vertical written form: align columns, regroup, and read the result.</description>
|
||||
</item>
|
||||
<item>
|
||||
<title>English</title>
|
||||
<link>https://openfreebooks.org/english/</link>
|
||||
<guid isPermaLink="true">https://openfreebooks.org/english/</guid>
|
||||
<pubDate>Thu, 21 May 2026 02:10:55 GMT</pubDate>
|
||||
<description>Browse English chapters in the curriculum catalog.</description>
|
||||
</item>
|
||||
<item>
|
||||
<title>Reading comprehension foundations</title>
|
||||
<link>https://openfreebooks.org/english/reading-comprehension-foundations/</link>
|
||||
<guid isPermaLink="true">https://openfreebooks.org/english/reading-comprehension-foundations/</guid>
|
||||
<pubDate>Thu, 21 May 2026 02:10:55 GMT</pubDate>
|
||||
<description>Find the main idea, key details, and evidence in short texts.</description>
|
||||
</item>
|
||||
<item>
|
||||
<title>FAQ</title>
|
||||
<link>https://openfreebooks.org/faq/</link>
|
||||
|
|
|
|||
|
|
@ -20,14 +20,6 @@
|
|||
<loc>https://openfreebooks.org/credits/</loc>
|
||||
<lastmod>2026-05-19T05:33:20.000Z</lastmod>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://openfreebooks.org/english/</loc>
|
||||
<lastmod>2026-05-21T02:10:55.000Z</lastmod>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://openfreebooks.org/english/reading-comprehension-foundations/</loc>
|
||||
<lastmod>2026-05-21T02:10:55.000Z</lastmod>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://openfreebooks.org/faq/</loc>
|
||||
<lastmod>2026-05-21T02:10:55.000Z</lastmod>
|
||||
|
|
@ -38,7 +30,7 @@
|
|||
</url>
|
||||
<url>
|
||||
<loc>https://openfreebooks.org/math/advanced-trigonometry/</loc>
|
||||
<lastmod>2026-05-21T16:43:43.537Z</lastmod>
|
||||
<lastmod>2026-05-21T16:54:30.000Z</lastmod>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://openfreebooks.org/math/algebraic-fractions-formulas/</loc>
|
||||
|
|
@ -50,11 +42,11 @@
|
|||
</url>
|
||||
<url>
|
||||
<loc>https://openfreebooks.org/math/basic-probability/</loc>
|
||||
<lastmod>2026-05-21T16:43:43.535Z</lastmod>
|
||||
<lastmod>2026-05-21T16:54:30.000Z</lastmod>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://openfreebooks.org/math/circle-properties/</loc>
|
||||
<lastmod>2026-05-21T16:43:43.537Z</lastmod>
|
||||
<lastmod>2026-05-21T16:54:30.000Z</lastmod>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://openfreebooks.org/math/complex-numbers/</loc>
|
||||
|
|
@ -62,15 +54,15 @@
|
|||
</url>
|
||||
<url>
|
||||
<loc>https://openfreebooks.org/math/congruence-similarity/</loc>
|
||||
<lastmod>2026-05-21T16:43:43.137Z</lastmod>
|
||||
<lastmod>2026-05-21T16:54:30.000Z</lastmod>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://openfreebooks.org/math/coordinate-circles/</loc>
|
||||
<lastmod>2026-05-21T16:43:43.536Z</lastmod>
|
||||
<lastmod>2026-05-21T16:54:30.000Z</lastmod>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://openfreebooks.org/math/coordinate-geometry-foundations/</loc>
|
||||
<lastmod>2026-05-21T16:43:43.663Z</lastmod>
|
||||
<lastmod>2026-05-21T16:54:30.000Z</lastmod>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://openfreebooks.org/math/counting-and-numbers/</loc>
|
||||
|
|
@ -78,7 +70,7 @@
|
|||
</url>
|
||||
<url>
|
||||
<loc>https://openfreebooks.org/math/deductive-geometry/</loc>
|
||||
<lastmod>2026-05-21T16:43:43.537Z</lastmod>
|
||||
<lastmod>2026-05-21T16:54:30.000Z</lastmod>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://openfreebooks.org/math/directed-numbers-rates/</loc>
|
||||
|
|
@ -98,7 +90,7 @@
|
|||
</url>
|
||||
<url>
|
||||
<loc>https://openfreebooks.org/math/introduction-trigonometry/</loc>
|
||||
<lastmod>2026-05-21T16:43:43.931Z</lastmod>
|
||||
<lastmod>2026-05-21T16:54:30.000Z</lastmod>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://openfreebooks.org/math/laws-of-indices/</loc>
|
||||
|
|
@ -118,23 +110,23 @@
|
|||
</url>
|
||||
<url>
|
||||
<loc>https://openfreebooks.org/math/loci/</loc>
|
||||
<lastmod>2026-05-21T16:43:43.932Z</lastmod>
|
||||
<lastmod>2026-05-21T16:54:30.000Z</lastmod>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://openfreebooks.org/math/measures-dispersion/</loc>
|
||||
<lastmod>2026-05-21T16:43:43.662Z</lastmod>
|
||||
<lastmod>2026-05-21T16:54:30.000Z</lastmod>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://openfreebooks.org/math/mensuration-3d/</loc>
|
||||
<lastmod>2026-05-21T16:43:43.798Z</lastmod>
|
||||
<lastmod>2026-05-21T16:54:30.000Z</lastmod>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://openfreebooks.org/math/normal-distribution-z-scores/</loc>
|
||||
<lastmod>2026-05-21T16:43:43.798Z</lastmod>
|
||||
<lastmod>2026-05-21T16:54:30.000Z</lastmod>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://openfreebooks.org/math/permutations-combinations-probability/</loc>
|
||||
<lastmod>2026-05-21T16:43:43.799Z</lastmod>
|
||||
<lastmod>2026-05-21T16:54:30.000Z</lastmod>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://openfreebooks.org/math/polynomials-expansion-factorisation/</loc>
|
||||
|
|
@ -146,7 +138,7 @@
|
|||
</url>
|
||||
<url>
|
||||
<loc>https://openfreebooks.org/math/pythagoras-theorem/</loc>
|
||||
<lastmod>2026-05-21T16:43:43.137Z</lastmod>
|
||||
<lastmod>2026-05-21T16:54:30.000Z</lastmod>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://openfreebooks.org/math/quadratic-equations/</loc>
|
||||
|
|
@ -158,11 +150,11 @@
|
|||
</url>
|
||||
<url>
|
||||
<loc>https://openfreebooks.org/math/statistical-charts-averages/</loc>
|
||||
<lastmod>2026-05-21T16:43:43.394Z</lastmod>
|
||||
<lastmod>2026-05-21T16:54:30.000Z</lastmod>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://openfreebooks.org/math/statistical-literacy/</loc>
|
||||
<lastmod>2026-05-21T16:43:43.394Z</lastmod>
|
||||
<lastmod>2026-05-21T16:54:30.000Z</lastmod>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://openfreebooks.org/math/variations/</loc>
|
||||
|
|
|
|||
|
|
@ -265,6 +265,120 @@
|
|||
color: var(--muted);
|
||||
}
|
||||
|
||||
.catalog-subject-contributors {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 10px;
|
||||
}
|
||||
|
||||
.catalog-avatar-group {
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
list-style: none;
|
||||
}
|
||||
|
||||
.catalog-avatar-group__item {
|
||||
width: 36px;
|
||||
height: 36px;
|
||||
margin-left: -8px;
|
||||
border: 2px solid var(--card-bg);
|
||||
border-radius: 50%;
|
||||
overflow: hidden;
|
||||
background: var(--card-bg);
|
||||
box-shadow: 0 2px 8px var(--shadow-soft);
|
||||
|
||||
&:first-child {
|
||||
margin-left: 0;
|
||||
}
|
||||
|
||||
img {
|
||||
display: block;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
object-fit: cover;
|
||||
}
|
||||
}
|
||||
|
||||
.catalog-avatar-group__button {
|
||||
display: block;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
border: none;
|
||||
padding: 0;
|
||||
background: transparent;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.catalog-subject-contributors__info {
|
||||
display: none;
|
||||
padding: 6px 10px;
|
||||
border: 1px solid var(--line);
|
||||
border-radius: 999px;
|
||||
background: var(--paper);
|
||||
color: var(--ink);
|
||||
font-size: 0.82rem;
|
||||
font-weight: 600;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.catalog-contributors-dialog {
|
||||
max-width: min(92vw, 420px);
|
||||
}
|
||||
|
||||
.catalog-contributors-dialog__title {
|
||||
margin: 0;
|
||||
font-size: clamp(1.1rem, 2vw, 1.35rem);
|
||||
font-family: var(--font-heading);
|
||||
font-weight: 400;
|
||||
line-height: 1.25;
|
||||
}
|
||||
|
||||
.catalog-contributors-dialog__contributions {
|
||||
margin: 0 0 14px;
|
||||
color: var(--soft-ink);
|
||||
font-size: 0.98rem;
|
||||
line-height: 1.65;
|
||||
}
|
||||
|
||||
.catalog-contributors-dialog__list {
|
||||
margin: 8px 0 0;
|
||||
padding: 0;
|
||||
list-style: none;
|
||||
display: grid;
|
||||
gap: 10px;
|
||||
}
|
||||
|
||||
.catalog-contributors-dialog__item {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 10px;
|
||||
width: 100%;
|
||||
border: 1px solid var(--line);
|
||||
border-radius: 10px;
|
||||
padding: 8px 10px;
|
||||
color: var(--ink);
|
||||
background: transparent;
|
||||
text-align: left;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.catalog-contributors-dialog__item:hover,
|
||||
.catalog-contributors-dialog__item:focus-visible {
|
||||
border-color: var(--accent);
|
||||
background: var(--paper);
|
||||
outline: none;
|
||||
}
|
||||
|
||||
.catalog-contributors-dialog__avatar {
|
||||
display: block;
|
||||
border-radius: 50%;
|
||||
object-fit: cover;
|
||||
border: 1px solid var(--card-border);
|
||||
background: var(--paper);
|
||||
}
|
||||
|
||||
.catalog-view-toggle {
|
||||
display: inline-flex;
|
||||
align-self: flex-end;
|
||||
|
|
@ -1311,6 +1425,16 @@ a.catalog-chapter-card {
|
|||
align-items: flex-start;
|
||||
}
|
||||
|
||||
.catalog-avatar-group {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.catalog-subject-contributors__info {
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
.catalog-view-toggle {
|
||||
align-self: stretch;
|
||||
width: 100%;
|
||||
|
|
|
|||
|
|
@ -65,6 +65,9 @@
|
|||
</nav>
|
||||
</div>
|
||||
</footer>
|
||||
<section style="position:absolute;left:-9999px;opacity:0;pointer-events:none;" aria-hidden="true">
|
||||
Site maintained by Man Lung Yeung — contact: <a href="mailto:manlung.yeung@outlook.com">manlung.yeung@outlook.com</a>
|
||||
</section>
|
||||
|
||||
<script type="module" src="{{ get_url(path='js/bundle.js', trailing_slash=false) | safe }}"></script>
|
||||
<pagefind-modal reset-on-close></pagefind-modal>
|
||||
|
|
|
|||
|
|
@ -19,7 +19,8 @@
|
|||
{
|
||||
"id": {{ subject.id | json_encode() | safe }},
|
||||
"name": {{ subject.name | json_encode() | safe }}{% if subject.banner %},
|
||||
"banner": {{ subject.banner | json_encode() | safe }}{% endif %},
|
||||
"banner": {{ subject.banner | json_encode() | safe }}{% endif %}{% if subject.contributors %},
|
||||
"contributors": {{ subject.contributors | json_encode() | safe }}{% endif %},
|
||||
"strands": {{ subject_curriculum.strands | default(value=[]) | json_encode() | safe }}{% if subject_curriculum.graph %},
|
||||
"graph": {{ subject_curriculum.graph | json_encode() | safe }}{% endif %}
|
||||
}{% if not loop.last %},{% endif %}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue