@@ -45,7 +45,9 @@ export class GettingStartedPage extends Disposable {
45
45
private gettingStartedCategories : IGettingStartedCategoryWithProgress [ ] ;
46
46
private currentCategory : IGettingStartedCategoryWithProgress | undefined ;
47
47
48
- private scrollbar : DomScrollableElement | undefined ;
48
+ private categoriesScrollbar : DomScrollableElement | undefined ;
49
+ private detailsScrollbar : DomScrollableElement | undefined ;
50
+ private detailImageScrollbar : DomScrollableElement | undefined ;
49
51
50
52
constructor (
51
53
initialState : { selectedCategory ?: string , selectedTask ?: string } ,
@@ -95,11 +97,11 @@ export class GettingStartedPage extends Disposable {
95
97
const badgeelement = assertIsDefined ( document . getElementById ( 'done-task-' + task . id ) ) ;
96
98
if ( task . done ) {
97
99
badgeelement . classList . remove ( 'codicon-circle-large-outline' ) ;
98
- badgeelement . classList . add ( 'codicon-pass-filled' ) ;
100
+ badgeelement . classList . add ( 'codicon-pass-filled' , 'complete' ) ;
99
101
}
100
102
else {
101
103
badgeelement . classList . add ( 'codicon-circle-large-outline' ) ;
102
- badgeelement . classList . remove ( 'codicon-pass-filled' ) ;
104
+ badgeelement . classList . remove ( 'codicon-pass-filled' , 'complete' ) ;
103
105
}
104
106
}
105
107
this . updateCategoryProgress ( ) ;
@@ -189,6 +191,8 @@ export class GettingStartedPage extends Disposable {
189
191
mediaElement . setAttribute ( 'src' , '' ) ;
190
192
mediaElement . setAttribute ( 'alt' , '' ) ;
191
193
}
194
+ this . detailsScrollbar ?. scanDomNode ( ) ;
195
+ this . detailImageScrollbar ?. scanDomNode ( ) ;
192
196
}
193
197
194
198
private onReady ( container : HTMLElement ) {
@@ -212,6 +216,14 @@ export class GettingStartedPage extends Disposable {
212
216
const categoriesSlide = assertIsDefined ( document . getElementById ( 'gettingStartedSlideCategory' ) ) ;
213
217
const tasksSlide = assertIsDefined ( document . getElementById ( 'gettingStartedSlideDetails' ) ) ;
214
218
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
+
215
227
const rightColumn = assertIsDefined ( container . querySelector ( '#getting-started-detail-right' ) ) ;
216
228
rightColumn . appendChild ( $ ( 'img#getting-started-media' ) ) ;
217
229
@@ -224,10 +236,11 @@ export class GettingStartedPage extends Disposable {
224
236
categoryScrollContainer . appendChild ( categoriesContainer ) ;
225
237
categoryScrollContainer . appendChild ( $ ( '.footer' , { } , $ ( 'a.skip' , { 'x-dispatch' : 'skip' } , localize ( 'gettingStarted.skip' , "Skip" ) ) ) ) ;
226
238
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 ( ) ) ;
229
242
categoriesSlide . appendChild ( $ ( '.gap' ) ) ;
230
- this . scrollbar . scanDomNode ( ) ;
243
+ this . categoriesScrollbar . scanDomNode ( ) ;
231
244
232
245
this . updateCategoryProgress ( ) ;
233
246
@@ -248,14 +261,16 @@ export class GettingStartedPage extends Disposable {
248
261
}
249
262
250
263
private layout ( ) {
251
- this . scrollbar ?. scanDomNode ( ) ;
264
+ this . categoriesScrollbar ?. scanDomNode ( ) ;
265
+ this . detailsScrollbar ?. scanDomNode ( ) ;
266
+ this . detailImageScrollbar ?. scanDomNode ( ) ;
252
267
}
253
268
254
269
private updateCategoryProgress ( ) {
255
270
document . querySelectorAll ( '.category-progress' ) . forEach ( element => {
256
271
const categoryID = element . getAttribute ( 'x-data-category-id' ) ;
257
272
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 ) ; }
259
274
if ( category . content . type !== 'items' ) { throw Error ( 'Category with ID ' + categoryID + ' is not of items type' ) ; }
260
275
const numDone = category . content . items . filter ( task => task . done ) . length ;
261
276
const numTotal = category . content . items . length ;
@@ -293,6 +308,7 @@ export class GettingStartedPage extends Disposable {
293
308
if ( ! category ) { throw Error ( 'could not find category with ID ' + categoryID ) ; }
294
309
if ( category . content . type !== 'items' ) { throw Error ( 'category with ID ' + categoryID + ' is not of items type' ) ; }
295
310
311
+ const leftColumn = assertIsDefined ( document . getElementById ( 'getting-started-detail-left' ) ) ;
296
312
const detailTitle = assertIsDefined ( document . getElementById ( 'getting-started-detail-title' ) ) ;
297
313
detailTitle . appendChild (
298
314
$ ( '.getting-started-category' ,
@@ -305,7 +321,7 @@ export class GettingStartedPage extends Disposable {
305
321
const categoryElements = category . content . items . map (
306
322
( task , i , arr ) => $ ( 'button.getting-started-task' ,
307
323
{ '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 } ) ,
309
325
$ ( '.task-description-container' , { } ,
310
326
$ ( 'h3.task-title' , { } , task . title ) ,
311
327
$ ( '.task-description.description' , { } , task . description ) ,
@@ -325,17 +341,21 @@ export class GettingStartedPage extends Disposable {
325
341
) )
326
342
) ) ) ;
327
343
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' } ) ) ;
329
347
categoryElements . forEach ( element => detailContainer . appendChild ( element ) ) ;
348
+ leftColumn . appendChild ( this . detailsScrollbar . getDomNode ( ) ) ;
330
349
331
350
const toExpand = category . content . items . find ( item => ! item . done ) ?? category . content . items [ 0 ] ;
332
351
this . selectTask ( selectedItem ?? toExpand . id ) ;
352
+ this . detailsScrollbar . scanDomNode ( ) ;
333
353
this . registerDispatchListeners ( container ) ;
334
354
}
335
355
336
356
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 ( ) ;
339
359
const detailTitle = assertIsDefined ( document . getElementById ( 'getting-started-detail-title' ) ) ;
340
360
while ( detailTitle . firstChild ) { detailTitle . removeChild ( detailTitle . firstChild ) ; }
341
361
}
0 commit comments