@@ -2932,6 +2932,97 @@ const scheduleDockerPostRenderPolish = (folderIds = []) => {
29322932 window . setTimeout ( run , 0 ) ;
29332933} ;
29342934
2935+ const normalizeDockerPageViewMode = ( value ) => (
2936+ typeof utils . normalizeRuntimePageViewMode === 'function'
2937+ ? utils . normalizeRuntimePageViewMode ( value )
2938+ : ( String ( value || '' ) . trim ( ) . toLowerCase ( ) === 'host' ? 'host' : 'folderview' )
2939+ ) ;
2940+
2941+ const resolveDockerPageViewMode = ( prefs = folderTypePrefs ) => normalizeDockerPageViewMode (
2942+ utils . normalizePrefs ( prefs || { } ) . pageViewMode
2943+ ) ;
2944+
2945+ const syncDockerAddFolderButtonVisibility = ( mode = 'folderview' ) => {
2946+ const resolvedMode = normalizeDockerPageViewMode ( mode ) ;
2947+ const existing = document . getElementById ( 'fvplus-docker-add-folder-btn' ) ;
2948+ if ( resolvedMode === 'host' ) {
2949+ if ( existing ) {
2950+ existing . remove ( ) ;
2951+ }
2952+ return ;
2953+ }
2954+ if ( existing ) {
2955+ return ;
2956+ }
2957+ const table = document . querySelector ( 'table#docker_containers' ) ;
2958+ if ( ! table || typeof table . insertAdjacentHTML !== 'function' ) {
2959+ return ;
2960+ }
2961+ table . insertAdjacentHTML (
2962+ 'afterend' ,
2963+ '<input id="fvplus-docker-add-folder-btn" type="button" onclick="createFolderBtn()" value="Add Folder" data-i18n="[value]add-folder">'
2964+ ) ;
2965+ if ( typeof $ ( 'body' ) . i18n === 'function' ) {
2966+ $ ( 'body' ) . i18n ( ) ;
2967+ }
2968+ if ( typeof $ ( '[type="button"]' ) . i18n === 'function' ) {
2969+ $ ( '[type="button"]' ) . i18n ( ) ;
2970+ }
2971+ } ;
2972+
2973+ const fetchDockerBootstrapPrefs = async ( ) => {
2974+ const response = await $ . get ( `/plugins/folderview.plus/server/prefs.php?type=docker&_=${ Date . now ( ) } ` ) . promise ( ) ;
2975+ const parsed = parseJsonPayloadSafe ( response ) ;
2976+ const nextPrefs = utils . normalizePrefs ( parsed ?. prefs || { } ) ;
2977+ folderTypePrefs = nextPrefs ;
2978+ applyRuntimePrefs ( nextPrefs ) ;
2979+ return nextPrefs ;
2980+ } ;
2981+
2982+ const ensureDockerBootstrapPrefs = ( ) => {
2983+ if ( lastAppliedRuntimePrefs && typeof lastAppliedRuntimePrefs === 'object' && Object . keys ( lastAppliedRuntimePrefs ) . length > 0 ) {
2984+ return Promise . resolve ( lastAppliedRuntimePrefs ) ;
2985+ }
2986+ if ( dockerBootstrapPrefsPromise ) {
2987+ return dockerBootstrapPrefsPromise ;
2988+ }
2989+ dockerBootstrapPrefsPromise = Promise . resolve ( )
2990+ . then ( ( ) => fetchDockerBootstrapPrefs ( ) )
2991+ . catch ( ( ) => utils . normalizePrefs ( folderTypePrefs || { } ) )
2992+ . finally ( ( ) => {
2993+ dockerBootstrapPrefsPromise = null ;
2994+ } ) ;
2995+ return dockerBootstrapPrefsPromise ;
2996+ } ;
2997+
2998+ const queueDockerRuntimeRenderForPageViewMode = ( ) => {
2999+ Promise . resolve ( )
3000+ . then ( ( ) => ensureDockerBootstrapPrefs ( ) )
3001+ . then ( ( prefs ) => {
3002+ if ( resolveDockerPageViewMode ( prefs ) === 'host' ) {
3003+ markDockerFatalBannerStep ( 'Docker host list mode active' ) ;
3004+ recordDockerFatalBannerAction ( 'Docker host list mode active' ) ;
3005+ return ;
3006+ }
3007+ if ( ! folderReq || ! Array . isArray ( folderReq . render ) || folderReq . render . length === 0 ) {
3008+ folderReq = buildDockerFolderReq ( {
3009+ liveUpdateStatus : isDockerHostUpdateSyncSuspended ( )
3010+ } ) ;
3011+ }
3012+ dockerHostLoadOwnsLoadingUi = true ;
3013+ queueCreateFoldersRender ( ) ;
3014+ } )
3015+ . catch ( ( ) => {
3016+ if ( ! folderReq || ! Array . isArray ( folderReq . render ) || folderReq . render . length === 0 ) {
3017+ folderReq = buildDockerFolderReq ( {
3018+ liveUpdateStatus : isDockerHostUpdateSyncSuspended ( )
3019+ } ) ;
3020+ }
3021+ dockerHostLoadOwnsLoadingUi = true ;
3022+ queueCreateFoldersRender ( ) ;
3023+ } ) ;
3024+ } ;
3025+
29353026const syncDockerVisibleFoldersFromRuntimeCache = ( ) => {
29363027 Object . entries ( globalFolders || { } ) . forEach ( ( [ id , folder ] ) => {
29373028 if ( ! folder || typeof folder !== 'object' ) {
@@ -5512,16 +5603,10 @@ window.listview = () => {
55125603 }
55135604
55145605 if ( ! loadedFolder ) {
5515- if ( ! folderReq || ! Array . isArray ( folderReq . render ) || folderReq . render . length === 0 ) {
5516- folderReq = buildDockerFolderReq ( {
5517- liveUpdateStatus : isDockerHostUpdateSyncSuspended ( )
5518- } ) ;
5519- }
5520- dockerHostLoadOwnsLoadingUi = true ;
5521- if ( FOLDER_VIEW_DEBUG_MODE ) console . log ( '[FV3_DEBUG] Patched listview: loadedFolder is false. Queueing createFolders render.' ) ;
5522- queueCreateFoldersRender ( ) ;
55235606 loadedFolder = true ;
5524- if ( FOLDER_VIEW_DEBUG_MODE ) console . log ( '[FV3_DEBUG] Patched listview: Set loadedFolder to true.' ) ;
5607+ if ( FOLDER_VIEW_DEBUG_MODE ) console . log ( '[FV3_DEBUG] Patched listview: loadedFolder is false. Resolving Docker page view render path.' ) ;
5608+ queueDockerRuntimeRenderForPageViewMode ( ) ;
5609+ if ( FOLDER_VIEW_DEBUG_MODE ) console . log ( '[FV3_DEBUG] Patched listview: Set loadedFolder to true.' ) ;
55255610 } else {
55265611 if ( FOLDER_VIEW_DEBUG_MODE ) console . log ( '[FV3_DEBUG] Patched listview: loadedFolder is true. Skipped createFolders.' ) ;
55275612 }
@@ -5724,6 +5809,7 @@ let folderTypePrefs = utils.normalizePrefs({});
57245809let liveRefreshTimer = null ;
57255810let liveRefreshMs = 0 ;
57265811let liveRefreshInFlight = false ;
5812+ let dockerBootstrapPrefsPromise = null ;
57275813let queuedLoadlistTimer = null ;
57285814let queuedLoadlistOptions = null ;
57295815let queuedLoadlistRequestedAt = 0 ;
@@ -6012,6 +6098,10 @@ const scheduleLiveRefresh = (prefs) => {
60126098const applyRuntimePrefs = ( prefs ) => {
60136099 const normalized = utils . normalizePrefs ( prefs || { } ) ;
60146100 lastAppliedRuntimePrefs = normalized ;
6101+ if ( document . body && typeof document . body . setAttribute === 'function' ) {
6102+ document . body . setAttribute ( 'data-fvplus-docker-page-view' , resolveDockerPageViewMode ( normalized ) ) ;
6103+ }
6104+ syncDockerAddFolderButtonVisibility ( resolveDockerPageViewMode ( normalized ) ) ;
60156105 const appColumnWidth = typeof utils . normalizeAppColumnWidth === 'function'
60166106 ? utils . normalizeAppColumnWidth ( normalized . appColumnWidth )
60176107 : ( [ 'compact' , 'wide' ] . includes ( String ( normalized . appColumnWidth || '' ) . toLowerCase ( ) ) ? String ( normalized . appColumnWidth || '' ) . toLowerCase ( ) : 'standard' ) ;
0 commit comments