Skip to content

Commit 32728f0

Browse files
Simplify TOC handling with [[toc]] directive (#39)
* simplify TOC links from /blog/slug#anchor to #anchor Only simplified same-article anchor links (TOC entries). Cross-article references are preserved with full paths. * chore: update build submodule to feature/relative-link-transformation - TOC links now absolute (/blog/slug#anchor) - Anchor link validation at build time - Fuzzy "did you mean?" suggestions for broken links * chore: update build submodule (skip external URLs in validation) * fix: repair broken anchor links and update build submodule - Fix Unicode heading IDs in TOC links (ä/ö/ü instead of ae/oe/ue) - Update build submodule to 968aa53 with link validation improvements * docs: add Claude Code instructions for submodule workflow * refactor: replace manual TOCs with [[toc]] directive Replaced 6 manual table of contents with [[toc]] for auto-generation. * fix: restore TOC headers that were incorrectly removed The [[toc]] directive only generates the listing, not headers. Restored original headers (Table of contents:, ## Content, etc.) and <hr> elements where they existed before the TOC listings. * fix: add missing [[toc]] to 3 overlooked articles These files were missed in the initial TOC migration: - 2022-11-use-define-for-class-fields - 2024-11-effect-afterrendereffect - 2024-11-linked-signal * fix: preserve CRLF line endings in TOC migration Restored files from main and applied only the [[toc]] change, preserving the original CRLF line endings. * chore: update build submodule (h4 in TOC)
1 parent 57d09f3 commit 32728f0

12 files changed

Lines changed: 53 additions & 106 deletions

File tree

.claude/CLAUDE.md

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
# CRITICAL: Git Submodule Warning
2+
3+
## DO NOT modify the `build/` folder directly!
4+
5+
The `build/` folder is a **git submodule** pointing to:
6+
`git@github.com:angular-schule/website-articles-build.git`
7+
8+
### If you need to modify the build system:
9+
10+
1. Clone or navigate to the standalone repository:
11+
`git@github.com:angular-schule/website-articles-build.git`
12+
13+
2. Make your changes there
14+
15+
3. Commit and push from there
16+
17+
4. Then update the submodule reference in this repo if needed
18+
19+
### Why?
20+
21+
- Submodules are separate git repositories
22+
- Changes made directly in `build/` will cause conflicts
23+
- The submodule state is tracked by the parent repo
24+
- Direct modifications mess up both repos
25+
26+
### Never do this:
27+
28+
```bash
29+
cd build/
30+
git checkout -b feature/xyz # WRONG!
31+
# editing files in build/ # WRONG!
32+
git commit # WRONG!
33+
```
34+
35+
### Always do this:
36+
37+
```bash
38+
cd <your-path-to>/website-articles-build
39+
git checkout -b feature/xyz # CORRECT!
40+
# edit files here # CORRECT!
41+
git commit # CORRECT!
42+
```

blog/2019-02-third-party-libraries-and-widgets/README.md

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -22,14 +22,7 @@ We will discuss a few possible strategies that depend on which technology to int
2222

2323
Table of contents:
2424

25-
* [General Considerations](/blog/2019-02-third-party-libraries-and-widgets#general-considerations)
26-
* [Integrating a pure ES6 JavaScript Library](/blog/2019-02-third-party-libraries-and-widgets#integrating-a-pure-es6-javascript-library) (lodash)
27-
* [Integrating JavaScript Widgets](/blog/2019-02-third-party-libraries-and-widgets#integrating-javascript-widgets) (plotly.js)
28-
* [Integrating old jQuery Widgets](/blog/2019-02-third-party-libraries-and-widgets#integrating-old-jquery-widgets) (jquery-datetimepicker)
29-
* [Integrating modern jQuery Widgets](/blog/2019-02-third-party-libraries-and-widgets#integrating-modern-jquery-widgets) (Kendo UI for jQuery)
30-
* [Improving performance](/blog/2019-02-third-party-libraries-and-widgets#improving-performance) (NgZone)
31-
* [Don't reinvent the wheel](/blog/2019-02-third-party-libraries-and-widgets#don-t-reinvent-the-wheel)
32-
* [Conclusion](/blog/2019-02-third-party-libraries-and-widgets#conclusion)
25+
[[toc]]
3326

3427

3528
## General Considerations

blog/2019-08-ng-deploy/README.md

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -20,13 +20,7 @@ hidden: false
2020

2121
Table of contents:
2222

23-
- [Introduction](/blog/2019-08-ng-deploy#introduction)
24-
- [Background](/blog/2019-08-ng-deploy#background)
25-
- [Command Line Call](/blog/2019-08-ng-deploy#command-line-call)
26-
- [Existing providers](/blog/2019-08-ng-deploy#existing-providers)
27-
- [Deploy to multiple targets](/blog/2019-08-ng-deploy#deploy-to-multiple-targets)
28-
- [How to make your own deployment builder](/blog/2019-08-ng-deploy#how-to-make-your-own-deployment-builder)
29-
- [Summary](/blog/2019-08-ng-deploy#summary)
23+
[[toc]]
3024

3125

3226

blog/2019-11-ngx-semantic-version/README.md

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -29,15 +29,7 @@ It will help you to keep your `CHANGELOG.md` file up to date and to release new
2929

3030
Table of contents:
3131

32-
- [TL;DR](/blog/2019-11-ngx-semantic-version#tl-dr)
33-
- [Introduction](/blog/2019-11-ngx-semantic-version#introduction)
34-
- [What does it do?](/blog/2019-11-ngx-semantic-version#what)
35-
- [commitlint: Enforcing conventional commit messages](/blog/2019-11-ngx-semantic-version#commitlint)
36-
- [husky: Hook into the git lifecycle](/blog/2019-11-ngx-semantic-version#husky)
37-
- [commitizen: Easily write conventional commit messages](/blog/2019-11-ngx-semantic-version#commitizen)
38-
- [standard-version: Generate changelogs from the git history](/blog/2019-11-ngx-semantic-version#standard-version)
39-
- [How to use ngx-semantic-version](/blog/2019-11-ngx-semantic-version#how-to)
40-
- [Conclusion](/blog/2019-11-ngx-semantic-version#conclusion)
32+
[[toc]]
4133

4234
## TL;DR
4335

blog/2020-01-everything-github/README.md

Lines changed: 1 addition & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -33,26 +33,7 @@ Best of all, for public repositories, this will not cost you a single cent!**
3333

3434
Table of contents:
3535

36-
- [Introduction](/blog/2020-01-everything-github#introduction)
37-
- [1. All parts explained](/blog/2020-01-everything-github#1-all-parts-explained)
38-
- [1.1. Git and GitHub Version Control](/blog/2020-01-everything-github#11-git-and-github-version-control)
39-
- [1.2. GitHub Actions](/blog/2020-01-everything-github#12-github-actions)
40-
- [1.3. GitHub Pages](/blog/2020-01-everything-github#13-github-pages)
41-
- [1.4. angular-cli-ghpages](/blog/2020-01-everything-github#14-angular-cli-ghpages)
42-
- [1.5. GitHub plans](/blog/2020-01-everything-github#15-github-plans)
43-
- [2. A simple Angular app](/blog/2020-01-everything-github#2-a-simple-angular-app)
44-
- [3. Hosting the source code on GitHub](/blog/2020-01-everything-github#3-hosting-the-source-code-on-github)
45-
- [4. A first deployment to GitHub Pages](/blog/2020-01-everything-github#4-a-first-deployment-to-github-pages)
46-
- [5. Automating the Deployment with GitHub Actions](/blog/2020-01-everything-github#5-automating-the-deployment-with-github-actions)
47-
- [5.1 About all tokens](/blog/2020-01-everything-github#51-about-all-tokens)
48-
- [5.2 Automate a public repo (via GH_TOKEN)](/blog/2020-01-everything-github#52-automate-a-public-repo-via-gh_token-)
49-
- [5.2.1 Setup a Personal Access Token](/blog/2020-01-everything-github#521-setup-a-personal-access-token)
50-
- [5.2.2 Setup the GitHub Action Workflow](/blog/2020-01-everything-github#522-setup-the-github-action-workflow)
51-
- [5.3 Automate a private repo (via GITHUB_TOKEN)](/blog/2020-01-everything-github#53-automate-a-private-repo-via-github_token-)
52-
- [6. Extra: Custom Domains](/blog/2020-01-everything-github#6-extra-custom-domains)
53-
- [6.1 Configuring a subdomain](/blog/2020-01-everything-github#61-configuring-a-subdomain)
54-
- [6.2 Configuring an apex domain](/blog/2020-01-everything-github#62-configuring-an-apex-domain)
55-
- [Summary](/blog/2020-01-everything-github#summary)
36+
[[toc]]
5637

5738
## Introduction
5839

blog/2020-01-ngrx-data-views/README.md

Lines changed: 1 addition & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -23,16 +23,7 @@ header: data-views-header.jpg
2323

2424
Table of contents:
2525

26-
- [Data Clustering in Enterprise Applications](/blog/2020-01-ngrx-data-views#data-clustering-in-enterprise-applications)
27-
- [Clustered data for Books](/blog/2020-01-ngrx-data-views#clustered-data-for-books)
28-
- [Using parameterized selectors](/blog/2020-01-ngrx-data-views#using-parameterized-selectors)
29-
- [The Problem](/blog/2020-01-ngrx-data-views#the-problem)
30-
- [Using Data-Views for De-Normalization](/blog/2020-01-ngrx-data-views#using-data-views-for-de-normalization)
31-
- [The new problem with Memoization](/blog/2020-01-ngrx-data-views#the-new-problem-with-memoization)
32-
- [Tackling Memoization](/blog/2020-01-ngrx-data-views#tackling-memoization)
33-
- [Enriched Data Views](/blog/2020-01-ngrx-data-views#enriched-data-views)
34-
- [Memoized Data View Methods](/blog/2020-01-ngrx-data-views#memoized-data-view-methods)
35-
- [Conclusion](/blog/2020-01-ngrx-data-views#conclusion)
26+
[[toc]]
3627

3728
<hr>
3829

blog/2022-11-use-define-for-class-fields/README.md

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -29,10 +29,7 @@ We will show you in detail what the problem is and how you should write your cod
2929

3030
## Contents
3131

32-
* [Property initialisation in TypeScript](/blog/2022-11-use-define-for-class-fields#property-initialisation-in-typescript)
33-
* [The proprietary behaviour of TypeScript](/blog/2022-11-use-define-for-class-fields#the-proprietary-behaviour-of-typescript)
34-
* [Future-proof property initialisation](/blog/2022-11-use-define-for-class-fields#future-proof-property-initialisation)
35-
* [Implications for existing Angular code](/blog/2022-11-use-define-for-class-fields#implications-for-existing-angular-code)
32+
[[toc]]
3633

3734
> **🇩🇪 This article is available in German language here: [TypeScript: useDefineForClassFields – zukünftige Breaking Changes vermeiden](https://angular-buch.com/blog/2022-11-use-define-for-class-fields)**
3835

blog/2024-11-effect-afterrendereffect/README.md

Lines changed: 1 addition & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -25,20 +25,7 @@ In this article, we'll explore how these two APIs compare, when to use each, and
2525

2626
## Contents
2727

28-
* [Angular 19 vs. Previous Versions: What's Different?](/blog/2024-11-effect-afterrendereffect#angular-19-vs-previous-versions-whats-different)
29-
* [Core Differences Between `effect()` and `afterRenderEffect()`](/blog/2024-11-effect-afterrendereffect#core-differences-between-effect-and-afterrendereffect)
30-
* [Introducing `effect()`](/blog/2024-11-effect-afterrendereffect#introducing-effect)
31-
* [Example for `effect()`: setting multiple things at once](/blog/2024-11-effect-afterrendereffect#example-for-effect-setting-multiple-things-at-once)
32-
* [When to choose `effect()` over `computed()`](/blog/2024-11-effect-afterrendereffect#when-to-choose-effect-over-computed)
33-
* [Introducing `afterRenderEffect()`](/blog/2024-11-effect-afterrendereffect#introducing-afterrendereffect)
34-
* [Understanding the Phases](/blog/2024-11-effect-afterrendereffect#understanding-the-phases)
35-
* [Phases Only Run Again When "Dirty" Through Signal Dependencies](/blog/2024-11-effect-afterrendereffect#phases-only-run-again-when-dirty-through-signal-dependencies)
36-
* [Example of `afterRenderEffect()`: Dynamically Resizing a Textarea](/blog/2024-11-effect-afterrendereffect#example-of-afterrendereffect-dynamically-resizing-a-textarea)
37-
* [Migration Guide: From Angular's Lifecycle Hooks to Signal-Based Reactivity](/blog/2024-11-effect-afterrendereffect#migration-guide-from-angulars-lifecycle-hooks-to-signal-based-reactivity)
38-
* [Reminder: `afterRenderEffect()` shouldn't be used in line-of-business code](/blog/2024-11-effect-afterrendereffect#reminder-afterrendereffect-shouldnt-be-used-in-line-of-business-code)
39-
* [Best Practices for Using `effect()` and `afterRenderEffect()`](/blog/2024-11-effect-afterrendereffect#best-practices-for-using-effect-and-afterrendereffect)
40-
* [Demo Application](/blog/2024-11-effect-afterrendereffect#demo-application)
41-
* [Conclusion](/blog/2024-11-effect-afterrendereffect#conclusion)
28+
[[toc]]
4229

4330

4431
## Angular 19 vs. Previous Versions: What's Different?

blog/2024-11-linked-signal/README.md

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -27,13 +27,7 @@ Here's a look at what the Linked Signal is, how it works, and some common use ca
2727

2828
## Contents
2929

30-
* [What is a Linked Signal?](/blog/2024-11-linked-signal#what-is-a-linked-signal)
31-
* [Basic Usage of Linked Signal](/blog/2024-11-linked-signal#basic-usage-of-linked-signal)
32-
* [Advanced Scenarios for Linked Signals](/blog/2024-11-linked-signal#advanced-scenarios-for-linked-signals)
33-
* [Linked Signal vs. Other Signals](/blog/2024-11-linked-signal#linked-signal-vs-other-signals)
34-
* [Best Practices for Using Linked Signal](/blog/2024-11-linked-signal#best-practices-for-using-linked-signal)
35-
* [Demo Application](/blog/2024-11-linked-signal#demo-application)
36-
* [Conclusion](/blog/2024-11-linked-signal#conclusion)
30+
[[toc]]
3731

3832

3933
> **🇩🇪 This article is available in German language here: [Neu in Angular 19: LinkedSignal für reaktive Zustandsverwaltung](https://angular-buch.com/blog/2024-11-linked-signal)**

blog/2025-05-angular20/README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -172,7 +172,7 @@ Since this decision, the Angular team has been working on integrating alternativ
172172
Two years ago, experimental builders for [Jest and Web Test Runner](https://blog.angular.dev/moving-angular-cli-to-jest-and-web-test-runner-ef85ef69ceca) were released.
173173
With Angular 20, another experimental integration is added for [Vitest](https://vitest.dev):
174174
Vitest has already become a staple in other web frameworks based on the [Vite](https://vite.dev) bundler.
175-
Angular's build process has already [used ESBuild with Vite since version 16](/blog/2023-05-angular16#esbuild).
175+
Angular's build process has already used ESBuild with Vite since version 16.
176176
With this gradual switch, we can now also use Vitest for unit and integration tests.
177177

178178
Which of the experimental test runners will become Angular's new standard is not yet decided!

0 commit comments

Comments
 (0)