@@ -28,6 +28,9 @@ type="rotate" from="0 20 20" to="360 20 20" dur="0.5s" repeatCount="indefinite"/
28
28
</svg>` ,
29
29
'caret_right' : `<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-caret-right-fill" viewBox="0 0 16 16">
30
30
<path d="m12.14 8.753-5.482 4.796c-.646.566-1.658.106-1.658-.753V3.204a1 1 0 0 1 1.659-.753l5.48 4.796a1 1 0 0 1 0 1.506z"/>
31
+ </svg>` ,
32
+ 'caret_right_circle' : `<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-caret-right" viewBox="0 0 16 16">
33
+ <path d="M6 12.796V3.204L11.481 8 6 12.796zm.659.753 5.48-4.796a1 1 0 0 0 0-1.506L6.66 2.451C6.011 1.885 5 2.345 5 3.204v9.592a1 1 0 0 0 1.659.753z"/>
31
34
</svg>` ,
32
35
request : function ( url , method = "GET" , data = { } , callback = null ) {
33
36
let xhr = new XMLHttpRequest ( ) ;
@@ -398,41 +401,42 @@ class ComponentCascadeDot {
398
401
let data = this . dimensional_data [ stack ] [ k ] ;
399
402
let currentStackDocuments = this . STACKS [ stack ] . childNodes ;
400
403
let parentNode = data . parentNodes [ data . parentNodes . length - 1 ] ;
401
- if ( data . checked === false ) {
402
- data . checked = true ;
403
- currentStackDocuments . forEach ( ( D , index ) => {
404
- if ( this . dimensional_data [ stack ] [ index ] . parentNodes . indexOf ( parentNode ) !== - 1 ) {
405
- currentStackDocuments [ index ] . classList . remove ( 'dlp-label-silence' ) ;
406
- } else {
407
- currentStackDocuments [ index ] . classList . add ( 'dlp-label-silence' ) ;
408
- }
409
- } ) ;
410
- this . tagCal ( id , this . MODE . insert ) ;
411
- element . classList . remove ( 'dlp-label-silence' ) ;
412
- element . querySelector ( 'i.right' ) === null && element . insertAdjacentHTML ( 'beforeend' , `<i class="right">${ _component . check } </i>` ) ;
413
- this . selectToChildren ( stack + 1 , data . nodes ) ;
414
- this . selectToSelected ( element , stack ) ;
415
- this . SELECTED_DOM . scrollTop = this . SELECTED_DOM . scrollHeight ;
416
- } else if ( data . checked === true ) {
404
+ if ( data . checked === true ) {
417
405
data . checked = false ;
418
406
this . tagCal ( id , this . MODE . delete ) ;
419
- element . querySelector ( 'i' ) !== null && element . removeChild ( element . querySelector ( 'i' ) ) ;
407
+ element . querySelector ( 'i.right ' ) !== null && element . removeChild ( element . querySelector ( 'i.right ' ) ) ;
420
408
for ( let D of this . SELECTED_DOM . childNodes ) {
421
409
if ( parseInt ( D . getAttribute ( 'data-id' ) ) === id ) {
422
410
D . remove ( ) ;
423
411
break ;
424
412
}
425
413
}
426
- } else {
427
- currentStackDocuments . forEach ( ( D , index ) => {
428
- if ( this . dimensional_data [ stack ] [ index ] . parentNodes . indexOf ( parentNode ) !== - 1 ) {
414
+ } else {
415
+ this . dimensional_data [ stack ] . forEach ( ( D , index ) => {
416
+ if ( D . parentNodes . indexOf ( parentNode ) !== - 1 ) {
429
417
currentStackDocuments [ index ] . classList . remove ( 'dlp-label-silence' ) ;
430
418
} else {
431
419
currentStackDocuments [ index ] . classList . add ( 'dlp-label-silence' ) ;
432
420
}
421
+ if ( D . expand === true ) {
422
+ data . expand = false ;
423
+ this . expand ( currentStackDocuments [ index ] , data . expand ) ;
424
+ }
433
425
} ) ;
434
- element . classList . remove ( 'dlp-label-silence' ) ;
435
- this . selectToChildren ( stack + 1 , data . nodes ) ;
426
+ if ( data . checked === false ) {
427
+ data . checked = true ;
428
+ this . tagCal ( id , this . MODE . insert ) ;
429
+ element . classList . remove ( 'dlp-label-silence' ) ;
430
+ if ( element . querySelector ( 'i.right' ) === null ) element . insertAdjacentHTML ( 'beforeend' , `<i class="right">${ _component . check } </i>` ) ;
431
+ this . selectToChildren ( stack + 1 , data . nodes ) ;
432
+ this . selectToSelected ( element , stack ) ;
433
+ this . SELECTED_DOM . scrollTop = this . SELECTED_DOM . scrollHeight ;
434
+ } else {
435
+ element . classList . remove ( 'dlp-label-silence' ) ;
436
+ data . expand = true ;
437
+ this . expand ( element , data . expand ) ;
438
+ this . selectToChildren ( stack + 1 , data . nodes ) ;
439
+ }
436
440
}
437
441
if ( Array . isArray ( data . parentNodes ) && data . parentNodes . length > 0 ) {
438
442
let parentNodes = data . parentNodes . slice ( 0 ) ;
@@ -459,20 +463,27 @@ class ComponentCascadeDot {
459
463
let parentNode = nodes [ stack - 1 ] ;
460
464
let currentStackDocuments = this . STACKS [ stack ] . childNodes ;
461
465
let to_first_index = null ;
462
- currentStackDocuments . forEach ( ( D , index ) => {
463
- let data = this . dimensional_data [ stack ] [ index ] ;
466
+ this . dimensional_data [ stack ] . forEach ( ( data , index ) => {
467
+ let D = currentStackDocuments [ index ] ;
464
468
let parents = data . parentNodes ;
465
- D . classList . remove ( 'dlp-label-active' ) ;
466
469
if ( checked === true || checked === undefined ) {
467
470
if ( parents . length > 0 && ( parents [ stack - 1 ] !== parentNode ) ) {
468
471
D . classList . add ( 'dlp-label-silence' ) ;
472
+ data . expand = false ;
473
+ this . expand ( D , data . expand ) ;
469
474
} else if ( parents . length === 0 && parseInt ( D . getAttribute ( 'data-id' ) ) !== node ) {
470
475
D . classList . add ( 'dlp-label-silence' ) ;
476
+ data . expand = false ;
477
+ this . expand ( D , data . expand ) ;
471
478
} else {
472
479
D . classList . remove ( 'dlp-label-silence' ) ;
473
- if ( to_first_index === null && parseInt ( D . getAttribute ( 'data-id' ) ) === node ) {
474
- to_first_index = index ;
475
- D . classList . add ( 'dlp-label-active' ) ;
480
+ if ( parseInt ( D . getAttribute ( 'data-id' ) ) === node ) {
481
+ if ( to_first_index === null ) to_first_index = index ;
482
+ data . expand = true ;
483
+ this . expand ( D , data . expand ) ;
484
+ } else if ( data . expand === true ) {
485
+ data . expand = false ;
486
+ this . expand ( D , data . expand ) ;
476
487
}
477
488
}
478
489
}
@@ -506,14 +517,15 @@ class ComponentCascadeDot {
506
517
let currentStackDocuments = this . STACKS [ stack ] . childNodes ;
507
518
let children = [ ] ;
508
519
let to_first_index = null ;
509
- currentStackDocuments . forEach ( ( D , index ) => {
520
+ this . dimensional_data [ stack ] . forEach ( ( data , index ) => {
521
+ let D = currentStackDocuments [ index ] ;
510
522
if ( nodes === null ) {
511
523
D . classList . add ( 'dlp-label-silence' ) ;
512
524
return ;
513
525
}
514
526
if ( nodes . indexOf ( parseInt ( D . getAttribute ( 'data-id' ) ) ) !== - 1 ) {
515
527
D . classList . remove ( 'dlp-label-silence' ) ;
516
- let child = this . dimensional_data [ stack ] [ index ] . nodes ;
528
+ let child = data . nodes ;
517
529
if ( Array . isArray ( child ) ) {
518
530
child . forEach ( ( c ) => {
519
531
if ( children . indexOf ( child ) === - 1 ) children . push ( c ) ;
@@ -522,12 +534,26 @@ class ComponentCascadeDot {
522
534
if ( to_first_index === null ) to_first_index = index ;
523
535
} else {
524
536
D . classList . add ( 'dlp-label-silence' ) ;
537
+ if ( data . expand === true ) {
538
+ data . expand = false ;
539
+ this . expand ( D , data . expand ) ;
540
+ }
525
541
}
526
542
} ) ;
527
543
if ( to_first_index !== null ) this . STACKS [ stack ] . scrollTop = to_first_index * 27 ;
528
544
this . selectToChildren ( stack + 1 , children ) ;
529
545
}
530
546
547
+ expand ( dom , open = true ) {
548
+ if ( open ) {
549
+ let left_mark = dom . querySelector ( 'i.left' ) ;
550
+ if ( left_mark ) left_mark . innerHTML = _component . caret_right_circle ;
551
+ return ;
552
+ }
553
+ let left_mark = dom . querySelector ( 'i.left' ) ;
554
+ if ( left_mark ) left_mark . innerHTML = _component . caret_right ;
555
+ }
556
+
531
557
tagCal ( id , operate ) {
532
558
if ( operate === this . MODE . insert ) {
533
559
if ( this . select_data . indexOf ( id ) === - 1 ) {
0 commit comments