1+ const localDefaultFolderStatusColors = {
2+ started : '#ffffff' ,
3+ paused : '#b8860b' ,
4+ stopped : '#ff4d4d'
5+ } ;
6+ const normalizeStatusHexColor = ( value , fallback ) => {
7+ if ( typeof value !== 'string' ) {
8+ return fallback ;
9+ }
10+ const trimmed = value . trim ( ) ;
11+ if ( ! / ^ # ( [ 0 - 9 a - f ] { 3 } | [ 0 - 9 a - f ] { 6 } ) $ / i. test ( trimmed ) ) {
12+ return fallback ;
13+ }
14+ if ( trimmed . length === 4 ) {
15+ return `#${ trimmed [ 1 ] } ${ trimmed [ 1 ] } ${ trimmed [ 2 ] } ${ trimmed [ 2 ] } ${ trimmed [ 3 ] } ${ trimmed [ 3 ] } ` . toLowerCase ( ) ;
16+ }
17+ return trimmed . toLowerCase ( ) ;
18+ } ;
119const utils = window . FolderViewPlusUtils || {
220 normalizePrefs : ( ) => ( { sortMode : 'created' , manualOrder : [ ] , autoRules : [ ] } ) ,
3- getAutoRuleMatches : ( ) => [ ]
21+ getAutoRuleMatches : ( ) => [ ] ,
22+ DEFAULT_FOLDER_STATUS_COLORS : localDefaultFolderStatusColors ,
23+ getFolderStatusColors : ( settings ) => {
24+ const incoming = settings && typeof settings === 'object' ? settings : { } ;
25+ return {
26+ started : normalizeStatusHexColor ( incoming . status_color_started , localDefaultFolderStatusColors . started ) ,
27+ paused : normalizeStatusHexColor ( incoming . status_color_paused , localDefaultFolderStatusColors . paused ) ,
28+ stopped : normalizeStatusHexColor ( incoming . status_color_stopped , localDefaultFolderStatusColors . stopped )
29+ } ;
30+ }
431} ;
532
633/**
@@ -291,7 +318,7 @@ const createFolderDocker = (folder, id, position, order, containersInfo, folders
291318 } ) . filter ( ( name ) => ! folder . containers . includes ( name ) ) ) ;
292319
293320 // the HTML template for the folder
294- const fld = `<div class="folder-showcase-outer-${ id } folder-showcase-outer"><span class="outer solid apps stopped folder-docker"><span id="folder-id-${ id } " onclick='addDockerFolderContext("${ id } ")' class="hand docker folder-hand-docker"><img src="${ folder . icon } " class="img folder-img-docker" onerror="this.src='/plugins/dynamix.docker.manager/images/question.png';"></span><span class="inner folder-inner-docker"><span class="folder-appname-docker">${ folder . name } </span><br><i class="fa fa-square stopped red-text folder-load-status-docker"></i><span class="state folder-state-docker">${ $ . i18n ( 'stopped' ) } </span></span><div class="folder-storage"></div></span><div class="folder-showcase-${ id } folder-showcase"></div></div>` ;
321+ const fld = `<div class="folder-showcase-outer-${ id } folder-showcase-outer"><span class="outer solid apps stopped folder-docker"><span id="folder-id-${ id } " onclick='addDockerFolderContext("${ id } ")' class="hand docker folder-hand-docker"><img src="${ folder . icon } " class="img folder-img-docker" onerror="this.src='/plugins/dynamix.docker.manager/images/question.png';"></span><span class="inner folder-inner-docker"><span class="folder-appname-docker">${ folder . name } </span><br><i class="fa fa-square stopped folder-load-status-docker"></i><span class="state folder-state-docker">${ $ . i18n ( 'stopped' ) } </span></span><div class="folder-storage"></div></span><div class="folder-showcase-${ id } folder-showcase"></div></div>` ;
295322
296323 // insertion at position of the folder
297324 if ( position === 0 ) {
@@ -403,7 +430,14 @@ const createFolderDocker = (folder, id, position, order, containersInfo, folders
403430 folder . containers = newFolder ;
404431
405432 //temp var
406- const sel = $ ( `tbody#docker_view span#folder-id-${ id } ` )
433+ const sel = $ ( `tbody#docker_view span#folder-id-${ id } ` ) ;
434+ const statusColors = typeof utils . getFolderStatusColors === 'function'
435+ ? utils . getFolderStatusColors ( folder . settings )
436+ : localDefaultFolderStatusColors ;
437+ const $statusIcon = sel . next ( 'span.inner' ) . children ( 'i' ) ;
438+ const $statusText = sel . next ( 'span.inner' ) . children ( 'span.state' ) ;
439+ $statusIcon . css ( 'color' , statusColors . stopped ) ;
440+ $statusText . css ( 'color' , statusColors . stopped ) ;
407441
408442 //set the status of a folder
409443
@@ -413,8 +447,8 @@ const createFolderDocker = (folder, id, position, order, containersInfo, folders
413447
414448 if ( started ) {
415449 sel . parent ( ) . removeClass ( 'stopped' ) . addClass ( 'started' ) ;
416- sel . next ( 'span.inner' ) . children ( 'i' ) . replaceWith ( $ ( ' <i class="fa fa-play started green-text" ></i>' ) ) ;
417- sel . next ( 'span.inner' ) . children ( 'span.state' ) . text ( `${ started } /${ Object . entries ( folder . containers ) . length } ${ $ . i18n ( 'started' ) } ` ) ;
450+ $statusIcon . replaceWith ( $ ( ` <i class="fa fa-play started folder-load-status-docker" style="color: ${ statusColors . started } " ></i>` ) ) ;
451+ $statusText . text ( `${ started } /${ Object . entries ( folder . containers ) . length } ${ $ . i18n ( 'started' ) } ` ) . css ( 'color' , statusColors . started ) ;
418452 }
419453
420454 if ( autostart === 0 ) {
@@ -499,7 +533,7 @@ const createFolderVM = (folder, id, position, order, vmInfo, foldersDone) => {
499533 } ) . filter ( ( name ) => ! folder . containers . includes ( name ) ) ) ;
500534
501535 // the HTML template for the folder
502- const fld = `<div class="folder-showcase-outer-${ id } folder-showcase-outer"><span class="outer solid vms stopped folder-vm"><span id="folder-id-${ id } " onclick='addVMFolderContext("${ id } ")' class="hand vm folder-hand-vm"><img src="${ folder . icon } " class="img folder-img-vm" onerror='this.src="/plugins/dynamix.docker.manager/images/question.png"'></span><span class="inner folder-inner-vm"><span class="folder-appname-vm">${ folder . name } </span><br><i class="fa fa-square stopped red-text folder-load-status-vm"></i><span class="state folder-state-vm">${ $ . i18n ( 'stopped' ) } </span></span><div class="folder-storage" style="display:none"></div></span><div class="folder-showcase-${ id } folder-showcase"></div></div>` ;
536+ const fld = `<div class="folder-showcase-outer-${ id } folder-showcase-outer"><span class="outer solid vms stopped folder-vm"><span id="folder-id-${ id } " onclick='addVMFolderContext("${ id } ")' class="hand vm folder-hand-vm"><img src="${ folder . icon } " class="img folder-img-vm" onerror='this.src="/plugins/dynamix.docker.manager/images/question.png"'></span><span class="inner folder-inner-vm"><span class="folder-appname-vm">${ folder . name } </span><br><i class="fa fa-square stopped folder-load-status-vm"></i><span class="state folder-state-vm">${ $ . i18n ( 'stopped' ) } </span></span><div class="folder-storage" style="display:none"></div></span><div class="folder-showcase-${ id } folder-showcase"></div></div>` ;
503537
504538 // insertion at position of the folder
505539 if ( position === 0 ) {
@@ -596,11 +630,18 @@ const createFolderVM = (folder, id, position, order, vmInfo, foldersDone) => {
596630
597631
598632 //set tehe status of a folder
633+ const sel = $ ( `tbody#vm_view span#folder-id-${ id } ` ) ;
634+ const statusColors = typeof utils . getFolderStatusColors === 'function'
635+ ? utils . getFolderStatusColors ( folder . settings )
636+ : localDefaultFolderStatusColors ;
637+ const $statusIcon = sel . next ( 'span.inner' ) . children ( 'i' ) ;
638+ const $statusText = sel . next ( 'span.inner' ) . children ( 'span.state' ) ;
639+ $statusIcon . css ( 'color' , statusColors . stopped ) ;
640+ $statusText . css ( 'color' , statusColors . stopped ) ;
599641 if ( started ) {
600- const sel = $ ( `tbody#vm_view span#folder-id-${ id } ` ) ;
601642 sel . parent ( ) . removeClass ( 'stopped' ) . addClass ( 'started' ) ;
602- sel . next ( 'span.inner' ) . children ( 'i' ) . replaceWith ( $ ( ' <i class="fa fa-play started green-text" ></i>' ) ) ;
603- sel . next ( 'span.inner' ) . children ( 'span.state' ) . text ( `${ started } /${ Object . entries ( folder . containers ) . length } ${ $ . i18n ( 'started' ) } ` ) ;
643+ $statusIcon . replaceWith ( $ ( ` <i class="fa fa-play started folder-load-status-vm" style="color: ${ statusColors . started } " ></i>` ) ) ;
644+ $statusText . text ( `${ started } /${ Object . entries ( folder . containers ) . length } ${ $ . i18n ( 'started' ) } ` ) . css ( 'color' , statusColors . started ) ;
604645 }
605646
606647 if ( autostart === 0 ) {
0 commit comments