@@ -54,6 +54,7 @@ export function Selectable(visbug) {
54
54
hotkeys ( `${ metaKey } +g,${ metaKey } +shift+g` , on_group )
55
55
hotkeys ( 'tab,shift+tab,enter,shift+enter' , on_keyboard_traversal )
56
56
hotkeys ( `${ metaKey } +shift+enter` , on_select_children )
57
+ hotkeys ( `shift+'` , on_select_parent )
57
58
}
58
59
59
60
const unlisten = ( ) => {
@@ -106,6 +107,7 @@ export function Selectable(visbug) {
106
107
'data-label-id' : null ,
107
108
'data-pseudo-select' : null ,
108
109
'data-measuring' : null ,
110
+ 'data-outward' : null ,
109
111
} ) )
110
112
111
113
selected = selected . filter ( node => node . getAttribute ( 'data-label-id' ) !== id )
@@ -453,6 +455,7 @@ export function Selectable(visbug) {
453
455
'data-selected-hide' : null ,
454
456
'data-label-id' : null ,
455
457
'data-pseudo-select' : null ,
458
+ 'data-outward' : null ,
456
459
} ) )
457
460
458
461
$ ( '[data-pseudo-select]' ) . forEach ( hover =>
@@ -715,6 +718,31 @@ export function Selectable(visbug) {
715
718
}
716
719
}
717
720
721
+ const on_select_parent = ( e , { key} ) => {
722
+ const targets = selected . reduce ( ( parents , node ) => {
723
+ const parent_element = node . parentElement ;
724
+
725
+ if ( parent_element . hasAttribute ( 'data-outward' ) )
726
+ return parents
727
+
728
+ parent_element . setAttribute ( 'data-outward' , true )
729
+ parents . push ( parent_element )
730
+
731
+ return parents
732
+ } , [ ] )
733
+
734
+ if ( targets . length ) {
735
+ e . preventDefault ( )
736
+ e . stopPropagation ( )
737
+
738
+ targets . forEach ( node => {
739
+ if ( node && node !== document . body ) {
740
+ select ( node )
741
+ }
742
+ } )
743
+ }
744
+ }
745
+
718
746
watchImagesForUpload ( )
719
747
listen ( )
720
748
0 commit comments