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 > 2024-12-19</ h3 >
95+ < p > < a href ="https://www.contextgeneric.dev/blog/early-preview-announcement/ "> Announcing Context-Generic Programming (Early Preview)</ a > </ p >
96+
97+ </ div >
98+ </ div >
99+
100+
101+
102+ </ div >
103+
104+
105+
106+ </ main >
107+
108+
109+ < footer >
110+ < small class ="subtext " style ="text-align: center; ">
111+ < a href ="https://maybevoid.com "> MaybeVoid</ a > © 2024
112+ < br />
113+ < a href ="https://creativecommons.org/licenses/by-sa/4.0/?ref=chooser-v1 " target ="_blank " rel ="license noopener noreferrer " style ="display:inline-block; ">
114+ 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 ="">
115+ </ a >
116+ </ small >
117+ </ footer >
118+
119+ </ body >
120+ < script >
121+ const scrollHandler = entries => {
122+ // Find the first entry which intersecting and ratio > 0.9 to highlight.
123+ let entry = entries . find ( entry => {
124+ return entry . isIntersecting && entry . intersectionRatio > 0.9 ;
125+ } ) ;
126+ if ( ! entry ) return ;
127+
128+ document . querySelectorAll ( ".toc a" ) . forEach ( ( item ) => {
129+ item . classList . remove ( "active" ) ;
130+ } ) ;
131+
132+ // let url = new URL(`#${entry.target.id}`);
133+ let link = document . querySelector ( `.toc a[href$="${ decodeURIComponent ( `#${ entry . target . id } ` ) } "]` )
134+ if ( link ) {
135+ link . classList . add ( "active" ) ;
136+ link . scrollIntoView ( { behavior : "auto" , block : "nearest" } ) ;
137+ }
138+ } ;
139+ // Set -100px root margin to improve highlight experience.
140+ const observer = new IntersectionObserver ( scrollHandler , { threshold : 1 } ) ;
141+ let items = document . querySelectorAll ( 'h1,h2,h3,h4,h5,h6' ) ;
142+ items . forEach ( item => observer . observe ( item ) ) ;
143+ </ script >
144+
145+ </ html >
0 commit comments