@@ -1006,6 +1006,98 @@ const bindCompactPreviewDefaultContext = ($item, $sourceRow) => {
10061006 $appLink . attr ( 'href' , '#' ) ;
10071007 }
10081008} ;
1009+ const buildCompactPreviewDefaultContextItem = ( $sourceRow , settings = { } , autostart = false ) => {
1010+ if ( ! $sourceRow || ! $sourceRow . length ) {
1011+ return null ;
1012+ }
1013+ const previewMode = Number ( settings ?. preview || 0 ) ;
1014+ const autostartClass = autostart ? ' autostart' : '' ;
1015+ const $sourceOuter = $sourceRow . find ( 'td.ct-name > span.outer' ) . first ( ) ;
1016+ if ( ! $sourceOuter . length ) {
1017+ return null ;
1018+ }
1019+ const $item = $sourceOuter . clone ( ) ;
1020+ const compactMode = previewMode >= 1 && previewMode <= 4 ? previewMode : 1 ;
1021+ $item . addClass ( `fv-docker-preview-card fv-docker-preview-card-compact fv-docker-preview-mode-${ compactMode } ${ autostartClass } ` ) ;
1022+ $item . removeAttr ( 'id' ) ;
1023+ $item . find ( 'br' ) . remove ( ) ;
1024+ $item . find ( 'i[id^="load-"]' ) . each ( ( _ , node ) => {
1025+ const $node = $ ( node ) ;
1026+ const currentId = String ( $node . attr ( 'id' ) || '' ) . trim ( ) ;
1027+ if ( currentId ) {
1028+ $node . attr ( 'id' , `folder-${ currentId } ` ) ;
1029+ }
1030+ } ) ;
1031+ const $hand = $item . children ( 'span.hand' ) . first ( ) ;
1032+ const $inner = $item . children ( 'span.inner' ) . first ( ) ;
1033+ if ( ! $inner . length ) {
1034+ return $item ;
1035+ }
1036+ const $appName = $inner . children ( 'span.appname' ) . first ( ) ;
1037+ const $meta = $ ( '<span class="fv-preview-meta-compact"></span>' ) ;
1038+ const $status = $ ( '<span class="fv-preview-status-compact"></span>' ) ;
1039+ const $trailingNodes = $appName . length ? $appName . nextAll ( ) . detach ( ) : $inner . contents ( ) . detach ( ) ;
1040+ $trailingNodes . each ( ( _ , node ) => {
1041+ const $node = $ ( node ) ;
1042+ if ( $node . is ( '.folder-element-custom-btn, .fv-preview-webui-placeholder' ) ) {
1043+ return ;
1044+ }
1045+ $status . append ( $node ) ;
1046+ } ) ;
1047+ if ( $status . children ( ) . length ) {
1048+ $meta . append ( $status ) ;
1049+ }
1050+ if ( compactMode !== 2 ) {
1051+ $meta . append ( '<span class="fv-preview-actions-compact"></span>' ) ;
1052+ }
1053+ if ( compactMode === 2 ) {
1054+ $inner . remove ( ) ;
1055+ } else {
1056+ if ( compactMode === 3 || compactMode === 4 ) {
1057+ $hand . remove ( ) ;
1058+ }
1059+ $inner . append ( $meta ) ;
1060+ }
1061+ return $item ;
1062+ } ;
1063+ const bindCompactPreviewDefaultContextProxy = ( $item ) => {
1064+ if ( ! $item || ! $item . length ) {
1065+ return ;
1066+ }
1067+ const $menuTrigger = $item . find ( 'span.hand, span.appname > a.exec' ) . filter ( function ( ) {
1068+ return String ( $ ( this ) . attr ( 'onclick' ) || '' ) . trim ( ) . length > 0
1069+ || String ( $ ( this ) . attr ( 'oncontextmenu' ) || '' ) . trim ( ) . length > 0
1070+ || $ ( this ) . hasClass ( 'hand' )
1071+ || $ ( this ) . hasClass ( 'exec' ) ;
1072+ } ) . first ( ) ;
1073+ if ( ! $menuTrigger . length ) {
1074+ return ;
1075+ }
1076+ const usingAppNameTrigger = $menuTrigger . is ( 'span.appname > a.exec' ) ;
1077+ const interactiveSelector = usingAppNameTrigger
1078+ ? 'span.appname, span.appname > a.exec, span.folder-element-custom-btn, span.folder-element-custom-btn > a, .fv-preview-actions-compact, .fv-preview-actions-compact *'
1079+ : '.hand, span.folder-element-custom-btn, span.folder-element-custom-btn > a, .fv-preview-actions-compact, .fv-preview-actions-compact *' ;
1080+ $item
1081+ . off ( '.fvCompactDefaultContextProxy' )
1082+ . on ( 'click.fvCompactDefaultContextProxy' , function ( event ) {
1083+ const $target = $ ( event . target ) ;
1084+ if ( $target . closest ( interactiveSelector ) . length ) {
1085+ return ;
1086+ }
1087+ event . preventDefault ( ) ;
1088+ event . stopPropagation ( ) ;
1089+ $menuTrigger . trigger ( 'click' ) ;
1090+ } )
1091+ . on ( 'contextmenu.fvCompactDefaultContextProxy' , function ( event ) {
1092+ const $target = $ ( event . target ) ;
1093+ if ( $target . closest ( interactiveSelector ) . length ) {
1094+ return ;
1095+ }
1096+ event . preventDefault ( ) ;
1097+ event . stopPropagation ( ) ;
1098+ $menuTrigger . trigger ( 'contextmenu' ) ;
1099+ } ) ;
1100+ } ;
10091101const decorateDockerFolderMemberRow = ( $row , folderId , containerName ) => {
10101102 if ( ! $row || ! $row . length ) {
10111103 return ;
@@ -3236,14 +3328,25 @@ const createFolder = (folder, id, positionInMainOrder, liveOrderArray, container
32363328 if ( FOLDER_VIEW_DEBUG_MODE ) console . log ( `[FV3_DEBUG] createFolder (id: ${ id } ): Selecting addPreview function based on folder.settings.preview = ${ folder . settings . preview } . Context setting: ${ folder . settings . context } ` ) ;
32373329 const compactMultiRowPreview = isCompactMultiRowPreview ( folder . settings ) ;
32383330 const appendCompactPreview = ( folderTrId , ctid , autostart , previewEntry , $sourceRow = null ) => {
3239- const { $item, $tooltipTrigger } = buildDockerPreviewItem ( {
3240- entry : previewEntry || { } ,
3241- settings : folder . settings ,
3242- autostart
3243- } ) ;
3331+ let compactPreviewItem = null ;
3332+ if ( folder . settings . context === 1 ) {
3333+ compactPreviewItem = buildCompactPreviewDefaultContextItem ( $sourceRow , folder . settings , autostart ) ;
3334+ }
3335+ const builtPreview = compactPreviewItem
3336+ ? { $item : compactPreviewItem , $tooltipTrigger : null }
3337+ : buildDockerPreviewItem ( {
3338+ entry : previewEntry || { } ,
3339+ settings : folder . settings ,
3340+ autostart
3341+ } ) ;
3342+ const { $item, $tooltipTrigger } = builtPreview ;
32443343 $ ( `tr.folder-id-${ folderTrId } div.folder-preview` ) . append ( $item ) ;
32453344 if ( folder . settings . context === 1 ) {
3246- bindCompactPreviewDefaultContext ( $item , $sourceRow ) ;
3345+ if ( compactPreviewItem ) {
3346+ bindCompactPreviewDefaultContextProxy ( $item ) ;
3347+ } else {
3348+ bindCompactPreviewDefaultContext ( $item , $sourceRow ) ;
3349+ }
32473350 return null ;
32483351 }
32493352 if ( folder . settings . context === 2 || folder . settings . context === 0 ) {
0 commit comments