1+ <!DOCTYPE html>
2+ < html lang ="en ">
3+
4+ < head >
5+ < meta charset ="UTF-8 ">
6+ < title > Blog | Context-Generic Programming </ title >
7+ < meta property ="og:title " content ="Context-Generic Programming " />
8+ < meta name ="twitter:title " content ="Context-Generic Programming ">
9+ < meta name ="viewport " content ="width=device-width, initial-scale=1, shrink-to-fit=no ">
10+
11+ < link rel ="icon " type ="image/png " href ="/favicon.png " />
12+
13+ < style >
14+ : root {
15+ /* Primary theme color */
16+ --primary-color : # f7e5c6 ;
17+ /* Primary theme text color */
18+ /* --primary-text-color: #543631; */
19+ --primary-text-color : # 000 ;
20+ --primary-text-color-over : # 000 ;
21+ /* Primary theme link color */
22+ --primary-link-color : # c27e08 ;
23+ /* Secondary color: the background body color */
24+ --secondary-color : # fcfaf6 ;
25+ --secondary-text-color : # 303030 ;
26+ /* Highlight text color of table of content */
27+ --toc-highlight-text-color : # c27e08 ;
28+ --toc-background-color : white;
29+ --shadow-color : # ddd ;
30+ /* Font used for headers (h1 & h2) */
31+ --header-font-family : "Fira Sans" , sans-serif;
32+ /* Font used for text */
33+ --text-font-family : "Fira Sans" , sans-serif;
34+ }
35+ </ style >
36+
37+ < link href ="https://fonts.googleapis.com/css?family=Alfa+Slab+One&display=swap " rel ="stylesheet ">
38+ < link href ="https://fonts.googleapis.com/css?family=Fira+Sans:400,500,600&display=swap " rel ="stylesheet ">
39+
40+ < link rel ="stylesheet " href ="/normalize.css ">
41+ < link rel ="stylesheet " href ="https://www.contextgeneric.dev/juice.css ">
42+
43+ < link rel ="stylesheet " href ="https://www.contextgeneric.dev/carbon.css ">
44+
45+ </ head >
46+
47+ < body >
48+
49+ < header class ="box-shadow ">
50+
51+
52+ < a href ="https://www.contextgeneric.dev/ ">
53+ < div class ="logo ">
54+ < img src ="https://www.contextgeneric.dev/rust-logo.svg " alt ="logo ">
55+ Context-Generic Programming
56+ </ div >
57+ </ a >
58+
59+ < nav >
60+
61+
62+
63+ < a class ="nav-item subtitle-text " href ="https://www.contextgeneric.dev/resources/ "> Resources</ a >
64+
65+
66+
67+
68+ < a class ="nav-item subtitle-text " href ="/blog "> Blog</ a >
69+
70+ < a class ="nav-item subtitle-text " href ="https://patterns.contextgeneric.dev "> Book</ a >
71+
72+ < a class ="nav-item subtitle-text " href ="https://github.com/contextgeneric "> GitHub</ a >
73+
74+
75+ </ nav >
76+
77+ </ header >
78+
79+
80+ < main >
81+
82+
83+
84+ < div class ="content text ">
85+
86+ < div class ="heading-text "> </ div >
87+ < h1 id ="blog "> < a class ="zola-anchor " href ="#blog " aria-label ="Anchor link for: blog "> Blog</ a > </ h1 >
88+
89+
90+
91+
92+
93+ < div >
94+ < h3 > 2025-01-09</ h3 >
95+ < p > < a href ="https://www.contextgeneric.dev/blog/v0-3-0-release/ "> CGP Updates: v0.3.0 Release and New Chapters</ a > </ p >
96+
97+ </ p >
98+ </ div >
99+
100+
101+ < div >
102+ < h3 > 2024-12-19</ h3 >
103+ < p > < a href ="https://www.contextgeneric.dev/blog/early-preview-announcement/ "> Announcing Context-Generic Programming (Early Preview)</ a > </ p >
104+
105+ </ p >
106+ </ div >
107+
108+
109+
110+ </ div >
111+
112+
113+
114+ </ main >
115+
116+
117+ < footer >
118+ < small class ="subtext " style ="text-align: center; ">
119+ < a href ="https://maybevoid.com "> MaybeVoid</ a > © 2024
120+ < br />
121+ < a href ="https://creativecommons.org/licenses/by-sa/4.0/?ref=chooser-v1 " target ="_blank " rel ="license noopener noreferrer " style ="display:inline-block; ">
122+ CC BY-SA 4.0< img style ="height:22px!important;margin-left:3px;vertical-align:text-bottom; " src ="https://mirrors.creativecommons.org/presskit/icons/cc.svg?ref=chooser-v1 " alt =""> < img style ="height:22px!important;margin-left:3px;vertical-align:text-bottom; " src ="https://mirrors.creativecommons.org/presskit/icons/by.svg?ref=chooser-v1 " alt =""> < img style ="height:22px!important;margin-left:3px;vertical-align:text-bottom; " src ="https://mirrors.creativecommons.org/presskit/icons/sa.svg?ref=chooser-v1 " alt ="">
123+ </ a >
124+ </ small >
125+ </ footer >
126+
127+ </ body >
128+ < script >
129+ const scrollHandler = entries => {
130+ // Find the first entry which intersecting and ratio > 0.9 to highlight.
131+ let entry = entries . find ( entry => {
132+ return entry . isIntersecting && entry . intersectionRatio > 0.9 ;
133+ } ) ;
134+ if ( ! entry ) return ;
135+
136+ document . querySelectorAll ( ".toc a" ) . forEach ( ( item ) => {
137+ item . classList . remove ( "active" ) ;
138+ } ) ;
139+
140+ // let url = new URL(`#${entry.target.id}`);
141+ let link = document . querySelector ( `.toc a[href$="${ decodeURIComponent ( `#${ entry . target . id } ` ) } "]` )
142+ if ( link ) {
143+ link . classList . add ( "active" ) ;
144+ link . scrollIntoView ( { behavior : "auto" , block : "nearest" } ) ;
145+ }
146+ } ;
147+ // Set -100px root margin to improve highlight experience.
148+ const observer = new IntersectionObserver ( scrollHandler , { threshold : 1 } ) ;
149+ let items = document . querySelectorAll ( 'h1,h2,h3,h4,h5,h6' ) ;
150+ items . forEach ( item => observer . observe ( item ) ) ;
151+ </ script >
152+
153+ </ html >
0 commit comments