Skip to content

Commit f91b8f2

Browse files
author
Jackson Kearl
committed
More scrolling in getting started
1 parent 01b0421 commit f91b8f2

File tree

3 files changed

+67
-26
lines changed

3 files changed

+67
-26
lines changed

src/vs/workbench/contrib/welcome/gettingStarted/browser/gettingStarted.css

Lines changed: 34 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,10 @@
1414
position: absolute;
1515
transition: left 0.25s, opacity 0.25s;
1616
left: 0;
17+
top: 0;
1718
}
1819

1920
.monaco-workbench .part.editor > .content .walkThroughContent .gettingStartedContainer .gettingStartedSlide.categories {
20-
height: calc(100% - 10px);
2121
display: flex;
2222
flex-direction: column;
2323
overflow: hidden;
@@ -82,21 +82,30 @@
8282
font-size: 32px;
8383
}
8484

85+
.monaco-workbench .part.editor > .content .walkThroughContent .gettingStartedContainer .gettingStartedSlide.detail {
86+
display: flex;
87+
flex-direction: column;
88+
overflow: hidden;
89+
}
90+
91+
.monaco-workbench .part.editor > .content .walkThroughContent .gettingStartedContainer .gettingStartedSlide.detail .gap {
92+
flex: 150px 0 1000
93+
}
94+
8595
.monaco-workbench .part.editor > .content .walkThroughContent .gettingStartedContainer .gettingStartedSlide.detail .getting-started-category {
8696
width: 330px;
8797
display: flex;
88-
padding: 40px 0 20px 12px;
98+
padding: 10px 0 20px 12px;
8999
margin: 0;
90100
min-height: auto;
91101
}
92102

93-
.monaco-workbench .part.editor > .content .walkThroughContent .gettingStartedContainer .gettingStartedSlide.detail .gap {
94-
flex: 150px 1 1
103+
.monaco-workbench .part.editor > .content .walkThroughContent .gettingStartedContainer .gettingStartedSlide.detail #getting-started-detail-columns .gap {
104+
flex: 150px 1 1000
95105
}
96106

97107
.monaco-workbench .part.editor > .content .walkThroughContent .gettingStartedContainer .gettingStartedSlide.detail #getting-started-media {
98108
min-height: 300px;
99-
flex: 40% 1 10
100109
}
101110

102111
.monaco-workbench .part.editor > .content .walkThroughContent .gettingStartedContainer .gettingStartedSlide.detail .getting-started-category .codicon {
@@ -106,9 +115,9 @@
106115

107116
.monaco-workbench .part.editor > .content .walkThroughContent .gettingStartedContainer .gettingStartedSlide.detail #getting-started-detail-columns {
108117
display: flex;
109-
height: calc(100% - 98px);
110118
justify-content: flex-start;
111-
padding: 44px;
119+
padding: 20px 20px 0;
120+
max-height: calc(100% - 20px);
112121
}
113122

114123
.monaco-workbench .part.editor > .content .walkThroughContent .gettingStartedContainer .gettingStartedSlide.detail .getting-started-task {
@@ -174,14 +183,25 @@
174183
min-width: 330px;
175184
width: 40%;
176185
max-width: 400px;
186+
display: flex;
187+
flex-direction: column;
188+
}
189+
190+
.monaco-workbench .part.editor > .content .walkThroughContent .gettingStartedContainer .gettingStartedSlide.detail .full-height-scrollable {
191+
height: 100%;
192+
}
193+
194+
.monaco-workbench .part.editor > .content .walkThroughContent .gettingStartedContainer .gettingStartedSlide.detail #getting-started-detail-container {
195+
height: 100%;
177196
}
178197

179198
.monaco-workbench .part.editor > .content .walkThroughContent .gettingStartedContainer .gettingStartedSlide.detail #getting-started-detail-right {
180199
display: flex;
181-
align-items: baseline;
200+
align-items: center;
201+
justify-content: center;
182202
width: 66%;
183-
text-align: center;
184-
padding: 52px 0 0 44px;
203+
min-height: 300px;
204+
padding: 0px 0 20px 44px;
185205
min-width: 400px;
186206
max-width: 800px;
187207
}
@@ -193,8 +213,8 @@
193213
padding: 16px;
194214
}
195215

196-
.monaco-workbench .part.editor > .content .walkThroughContent .gettingStartedContainer button:not(:first-child) {
197-
margin-top: 12px;
216+
.monaco-workbench .part.editor > .content .walkThroughContent .gettingStartedContainer button {
217+
margin-bottom: 12px;
198218
}
199219

200220
.monaco-workbench .part.editor > .content .walkThroughContent .gettingStartedContainer button:hover {
@@ -207,7 +227,8 @@
207227

208228
.monaco-workbench .part.editor > .content .walkThroughContent .gettingStartedContainer .prev-button {
209229
position: absolute;
210-
left: 0;
230+
left: -2px;
231+
top: -10px;
211232
font-size: 12pt;
212233
margin: 10px;
213234
}

src/vs/workbench/contrib/welcome/gettingStarted/browser/gettingStarted.ts

Lines changed: 32 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,9 @@ export class GettingStartedPage extends Disposable {
4545
private gettingStartedCategories: IGettingStartedCategoryWithProgress[];
4646
private currentCategory: IGettingStartedCategoryWithProgress | undefined;
4747

48-
private scrollbar: DomScrollableElement | undefined;
48+
private categoriesScrollbar: DomScrollableElement | undefined;
49+
private detailsScrollbar: DomScrollableElement | undefined;
50+
private detailImageScrollbar: DomScrollableElement | undefined;
4951

5052
constructor(
5153
initialState: { selectedCategory?: string, selectedTask?: string },
@@ -95,11 +97,11 @@ export class GettingStartedPage extends Disposable {
9597
const badgeelement = assertIsDefined(document.getElementById('done-task-' + task.id));
9698
if (task.done) {
9799
badgeelement.classList.remove('codicon-circle-large-outline');
98-
badgeelement.classList.add('codicon-pass-filled');
100+
badgeelement.classList.add('codicon-pass-filled', 'complete');
99101
}
100102
else {
101103
badgeelement.classList.add('codicon-circle-large-outline');
102-
badgeelement.classList.remove('codicon-pass-filled');
104+
badgeelement.classList.remove('codicon-pass-filled', 'complete');
103105
}
104106
}
105107
this.updateCategoryProgress();
@@ -189,6 +191,8 @@ export class GettingStartedPage extends Disposable {
189191
mediaElement.setAttribute('src', '');
190192
mediaElement.setAttribute('alt', '');
191193
}
194+
this.detailsScrollbar?.scanDomNode();
195+
this.detailImageScrollbar?.scanDomNode();
192196
}
193197

194198
private onReady(container: HTMLElement) {
@@ -212,6 +216,14 @@ export class GettingStartedPage extends Disposable {
212216
const categoriesSlide = assertIsDefined(document.getElementById('gettingStartedSlideCategory'));
213217
const tasksSlide = assertIsDefined(document.getElementById('gettingStartedSlideDetails'));
214218

219+
const tasksContent = assertIsDefined(document.getElementById('getting-started-detail-columns'));
220+
tasksContent.remove();
221+
if (this.detailImageScrollbar) { this.detailImageScrollbar.dispose(); }
222+
this.detailImageScrollbar = this._register(new DomScrollableElement(tasksContent, {}));
223+
tasksSlide.appendChild(this.detailImageScrollbar.getDomNode());
224+
tasksSlide.appendChild($('.gap'));
225+
this.detailImageScrollbar.scanDomNode();
226+
215227
const rightColumn = assertIsDefined(container.querySelector('#getting-started-detail-right'));
216228
rightColumn.appendChild($('img#getting-started-media'));
217229

@@ -224,10 +236,11 @@ export class GettingStartedPage extends Disposable {
224236
categoryScrollContainer.appendChild(categoriesContainer);
225237
categoryScrollContainer.appendChild($('.footer', {}, $('a.skip', { 'x-dispatch': 'skip' }, localize('gettingStarted.skip', "Skip"))));
226238

227-
this.scrollbar = this._register(new DomScrollableElement(categoryScrollContainer, {}));
228-
categoriesSlide.appendChild(this.scrollbar.getDomNode());
239+
if (this.categoriesScrollbar) { this.categoriesScrollbar.dispose(); }
240+
this.categoriesScrollbar = this._register(new DomScrollableElement(categoryScrollContainer, {}));
241+
categoriesSlide.appendChild(this.categoriesScrollbar.getDomNode());
229242
categoriesSlide.appendChild($('.gap'));
230-
this.scrollbar.scanDomNode();
243+
this.categoriesScrollbar.scanDomNode();
231244

232245
this.updateCategoryProgress();
233246

@@ -248,14 +261,16 @@ export class GettingStartedPage extends Disposable {
248261
}
249262

250263
private layout() {
251-
this.scrollbar?.scanDomNode();
264+
this.categoriesScrollbar?.scanDomNode();
265+
this.detailsScrollbar?.scanDomNode();
266+
this.detailImageScrollbar?.scanDomNode();
252267
}
253268

254269
private updateCategoryProgress() {
255270
document.querySelectorAll('.category-progress').forEach(element => {
256271
const categoryID = element.getAttribute('x-data-category-id');
257272
const category = this.gettingStartedCategories.find(category => category.id === categoryID);
258-
if (!category) { throw Error('Could not find c=ategory with ID ' + categoryID); }
273+
if (!category) { throw Error('Could not find category with ID ' + categoryID); }
259274
if (category.content.type !== 'items') { throw Error('Category with ID ' + categoryID + ' is not of items type'); }
260275
const numDone = category.content.items.filter(task => task.done).length;
261276
const numTotal = category.content.items.length;
@@ -293,6 +308,7 @@ export class GettingStartedPage extends Disposable {
293308
if (!category) { throw Error('could not find category with ID ' + categoryID); }
294309
if (category.content.type !== 'items') { throw Error('category with ID ' + categoryID + ' is not of items type'); }
295310

311+
const leftColumn = assertIsDefined(document.getElementById('getting-started-detail-left'));
296312
const detailTitle = assertIsDefined(document.getElementById('getting-started-detail-title'));
297313
detailTitle.appendChild(
298314
$('.getting-started-category',
@@ -305,7 +321,7 @@ export class GettingStartedPage extends Disposable {
305321
const categoryElements = category.content.items.map(
306322
(task, i, arr) => $('button.getting-started-task',
307323
{ 'x-dispatch': 'selectTask:' + task.id, id: 'getting-started-task-' + task.id },
308-
$('.codicon' + (task.done ? '.codicon-pass-filled' : '.codicon-circle-large-outline'), { id: 'done-task-' + task.id }),
324+
$('.codicon' + (task.done ? '.complete.codicon-pass-filled' : '.codicon-circle-large-outline'), { id: 'done-task-' + task.id }),
309325
$('.task-description-container', {},
310326
$('h3.task-title', {}, task.title),
311327
$('.task-description.description', {}, task.description),
@@ -325,17 +341,21 @@ export class GettingStartedPage extends Disposable {
325341
))
326342
)));
327343

328-
const detailContainer = assertIsDefined(document.getElementById('getting-started-detail-container'));
344+
const detailContainer = $('#getting-started-detail-container');
345+
if (this.detailsScrollbar) { this.detailsScrollbar.getDomNode().remove(); this.detailsScrollbar.dispose(); }
346+
this.detailsScrollbar = this._register(new DomScrollableElement(detailContainer, { className: 'full-height-scrollable' }));
329347
categoryElements.forEach(element => detailContainer.appendChild(element));
348+
leftColumn.appendChild(this.detailsScrollbar.getDomNode());
330349

331350
const toExpand = category.content.items.find(item => !item.done) ?? category.content.items[0];
332351
this.selectTask(selectedItem ?? toExpand.id);
352+
this.detailsScrollbar.scanDomNode();
333353
this.registerDispatchListeners(container);
334354
}
335355

336356
private clearDetialView() {
337-
const detailContainer = assertIsDefined(document.getElementById('getting-started-detail-container'));
338-
while (detailContainer.firstChild) { detailContainer.removeChild(detailContainer.firstChild); }
357+
const detailContainer = (document.getElementById('getting-started-detail-container'));
358+
detailContainer?.remove();
339359
const detailTitle = assertIsDefined(document.getElementById('getting-started-detail-title'));
340360
while (detailTitle.firstChild) { detailTitle.removeChild(detailTitle.firstChild); }
341361
}

src/vs/workbench/contrib/welcome/gettingStarted/browser/vs_code_editor_getting_started.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,11 +18,11 @@ export default () => `
1818
</div>
1919
<div id="gettingStartedSlideDetails" class="gettingStartedSlide detail">
2020
<a class="prev-button" x-dispatch="scrollPrev"><span class="scroll-button codicon codicon-chevron-left"></span>Back</a>
21+
<div class="gap"></div>
2122
<div id="getting-started-detail-columns">
2223
<div class="gap"></div>
2324
<div id="getting-started-detail-left">
2425
<div id="getting-started-detail-title"></div>
25-
<div id="getting-started-detail-container"></div>
2626
</div>
2727
<div id="getting-started-detail-right"></div>
2828
<div class="gap"></div>

0 commit comments

Comments
 (0)