Skip to content

Commit a0cd4b3

Browse files
authored
Merge pull request #259881 from microsoft/eli/release-notes-update-103
updated release notes rendering to support new format
2 parents 7d49976 + b10bd56 commit a0cd4b3

File tree

1 file changed

+176
-1
lines changed

1 file changed

+176
-1
lines changed

src/vs/workbench/contrib/update/browser/releaseNotesEditor.ts

Lines changed: 176 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -272,6 +272,12 @@ export class ReleaseNotesManager {
272272
}
273273
}]
274274
});
275+
276+
// Remove HTML comment markers around table of contents navigation
277+
const processedContent = content
278+
.replace(/<!--\s*TOC\s*/gi, '')
279+
.replace(/\s*Navigation End\s*-->/gi, '');
280+
275281
const colorMap = TokenizationRegistry.getColorMap();
276282
const css = colorMap ? generateTokensCSSForColorMap(colorMap) : '';
277283
const showReleaseNotes = Boolean(this._configurationService.getValue<boolean>('update.showReleaseNotes'));
@@ -366,10 +372,179 @@ export class ReleaseNotesManager {
366372
}
367373
368374
header { display: flex; align-items: center; padding-top: 1em; }
375+
376+
/* Release notes enhancements from vscode-docs */
377+
html {
378+
font-size: 10px;
379+
height: 100%;
380+
overscroll-behavior: none;
381+
}
382+
383+
body {
384+
margin: 0 auto;
385+
max-width: 980px;
386+
height: auto;
387+
overflow-y: auto;
388+
overscroll-behavior: none;
389+
}
390+
391+
/* Scroll to top button */
392+
#scroll-to-top {
393+
position: fixed;
394+
width: 40px;
395+
height: 40px;
396+
right: 25px;
397+
bottom: 25px;
398+
background-color: var(--vscode-button-background, #444);
399+
border-color: var(--vscode-button-border);
400+
border-radius: 50%;
401+
cursor: pointer;
402+
box-shadow: 1px 1px 1px rgba(0,0,0,.25);
403+
outline: none;
404+
display: flex;
405+
justify-content: center;
406+
align-items: center;
407+
}
408+
409+
#scroll-to-top:hover {
410+
background-color: var(--vscode-button-hoverBackground);
411+
box-shadow: 2px 2px 2px rgba(0,0,0,.25);
412+
}
413+
414+
body.vscode-high-contrast #scroll-to-top {
415+
border-width: 2px;
416+
border-style: solid;
417+
box-shadow: none;
418+
}
419+
420+
#scroll-to-top span.icon::before {
421+
content: "";
422+
display: block;
423+
background: var(--vscode-button-foreground);
424+
/* Chevron up icon */
425+
-webkit-mask-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDE5LjIuMCwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPgo8c3ZnIHZlcnNpb249IjEuMSIgaWQ9IkxheWVyXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IgoJIHZpZXdCb3g9IjAgMCAxNiAxNiIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgMTYgMTY7IiB4bWw6c3BhY2U9InByZXNlcnZlIj4KPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KCS5zdDB7ZmlsbDojRkZGRkZGO30KCS5zdDF7ZmlsbDpub25lO30KPC9zdHlsZT4KPHRpdGxlPnVwY2hldnJvbjwvdGl0bGU+CjxwYXRoIGNsYXNzPSJzdDAiIGQ9Ik04LDUuMWwtNy4zLDcuM0wwLDExLjZsOC04bDgsOGwtMC43LDAuN0w4LDUuMXoiLz4KPHJlY3QgY2xhc3M9InN0MSIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2Ii8+Cjwvc3ZnPgo=');
426+
mask-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDE5LjIuMCwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPgo8c3ZnIHZlcnNpb249IjEuMSIgaWQ9IkxheWVyXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IgoJIHZpZXdCb3g9IjAgMCAxNiAxNiIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgMTYgMTY7IiB4bWw6c3BhY2U9InByZXNlcnZlIj4KPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KCS5zdDB7ZmlsbDojRkZGRkZGO30KCS5zdDF7ZmlsbDpub25lO30KPC9zdHlsZT4KPHRpdGxlPnVwY2hldnJvbjwvdGl0bGU+CjxwYXRoIGNsYXNzPSJzdDAiIGQ9Ik04LDUuMWwtNy4zLDcuM0wwLDExLjZsOC04bDgsOGwtMC43LDAuN0w4LDUuMXoiLz4KPHJlY3QgY2xhc3M9InN0MSIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2Ii8+Cjwvc3ZnPgo=');
427+
width: 16px;
428+
height: 16px;
429+
}
430+
431+
/* Header styling */
432+
h2 {
433+
margin-top: 1.2em;
434+
scroll-margin-top: 1.2em;
435+
}
436+
437+
h2:not(:first-of-type) {
438+
margin-top: 4em;
439+
scroll-margin-top: 1em;
440+
}
441+
442+
h3 {
443+
margin-top: 4em;
444+
scroll-margin-top: 1em;
445+
}
446+
447+
h2 + h3 {
448+
margin-top: 0;
449+
}
450+
451+
/* Highlights table styling */
452+
.highlights-table {
453+
border-collapse: collapse;
454+
border: none;
455+
}
456+
457+
.highlights-table th {
458+
vertical-align: top;
459+
border: none;
460+
padding-top: 2em;
461+
font-weight: bold;
462+
}
463+
464+
.highlights-table td {
465+
vertical-align: top;
466+
border: none;
467+
}
468+
469+
.highlights-table tr:nth-child(2) td {
470+
padding-bottom: 1em;
471+
}
472+
473+
/* Main content layout */
474+
.toc-nav-layout {
475+
display: flex;
476+
align-items: flex-start;
477+
}
478+
479+
/* TOC Navigation */
480+
#toc-nav {
481+
position: sticky;
482+
top: 20px;
483+
width: 10vw;
484+
min-width: 120px;
485+
margin-right: 32px;
486+
margin-top: 2em;
487+
}
488+
489+
#toc-nav > div {
490+
font-weight: bold;
491+
font-size: 1em;
492+
margin-bottom: 1em;
493+
text-transform: uppercase;
494+
}
495+
496+
#toc-nav ul {
497+
list-style: none;
498+
padding: 0;
499+
margin: 0;
500+
}
501+
502+
#toc-nav ul li {
503+
margin-bottom: 0.5em;
504+
}
505+
506+
#toc-nav a {
507+
color: var(--vscode-editor-foreground, #ccc);
508+
text-decoration: none !important;
509+
transition: background-color 0.2s, color 0.2s;
510+
padding: 4px 6px;
511+
margin: -4px -6px;
512+
border-radius: 4px;
513+
display: block;
514+
outline: none;
515+
}
516+
517+
#toc-nav a:hover {
518+
background-color: var(--vscode-button-secondaryHoverBackground, #1177bb);
519+
color: var(--vscode-button-secondaryForeground, #ffffff);
520+
cursor: pointer;
521+
text-decoration: none !important;
522+
}
523+
524+
/* Main content area */
525+
.notes-main {
526+
flex: 1;
527+
min-width: 0;
528+
}
529+
530+
/* Responsive breakpoint - Hide TOC on smaller screens */
531+
@media (max-width: 576px) {
532+
#toc-nav {
533+
display: none;
534+
}
535+
536+
.toc-nav-layout {
537+
flex-direction: column;
538+
}
539+
540+
.notes-main {
541+
margin-left: 0;
542+
}
543+
}
369544
</style>
370545
</head>
371546
<body>
372-
${content}
547+
${processedContent}
373548
<script nonce="${nonce}">
374549
const vscode = acquireVsCodeApi();
375550
const container = document.createElement('p');

0 commit comments

Comments
 (0)