From 471a41525d8beb5566c90f6a304a75f46f29adf6 Mon Sep 17 00:00:00 2001 From: Squidly271 Date: Tue, 5 Aug 2025 21:57:03 -0400 Subject: [PATCH 01/14] Fix Display Issues re: TS --- .../dynamix.docker.manager/include/CreateDocker.php | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/emhttp/plugins/dynamix.docker.manager/include/CreateDocker.php b/emhttp/plugins/dynamix.docker.manager/include/CreateDocker.php index f92a53e8f..7db25206f 100644 --- a/emhttp/plugins/dynamix.docker.manager/include/CreateDocker.php +++ b/emhttp/plugins/dynamix.docker.manager/include/CreateDocker.php @@ -1184,11 +1184,12 @@ _(Use Tailscale)_:
-_(Warning)_: invert):?> +_(Warning)_: : Tailscale Key expired! Renew/Disable key expiry for ''. -: Tailscale Key will expire in days?> days! Disable Key Expiry for ''. +_(Warning)_: +: Tailscale Key will expire in days?> days! Disable Key Expiry for ''.
@@ -1197,7 +1198,7 @@ _(Use Tailscale)_:
_(Warning)_: -: The following route(s) are not approved: +: The following route(s) are not approved:
From 4384fc3e8cd3b6d899eea30460de5f86c119e3ff Mon Sep 17 00:00:00 2001 From: Squidly271 Date: Tue, 5 Aug 2025 22:02:58 -0400 Subject: [PATCH 02/14] Fix: Another possible and a missing translations --- .../plugins/dynamix.docker.manager/include/CreateDocker.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/emhttp/plugins/dynamix.docker.manager/include/CreateDocker.php b/emhttp/plugins/dynamix.docker.manager/include/CreateDocker.php index 7db25206f..4c067d06b 100644 --- a/emhttp/plugins/dynamix.docker.manager/include/CreateDocker.php +++ b/emhttp/plugins/dynamix.docker.manager/include/CreateDocker.php @@ -1177,7 +1177,7 @@ _(Use Tailscale)_:
-Warning: +_(Warning)_: : Exit Node not yet approved. Navigate to the Tailscale website and approve it.
@@ -1186,7 +1186,7 @@ _(Use Tailscale)_:
invert):?> _(Warning)_: -: Tailscale Key expired! Renew/Disable key expiry for ''. +: Tailscale Key expired! Renew/Disable key expiry for ''. _(Warning)_: : Tailscale Key will expire in days?> days! Disable Key Expiry for ''. From f13fdd3f13e38f690a6ec5e03c2147e0ffbfc2b1 Mon Sep 17 00:00:00 2001 From: Squidly271 Date: Wed, 6 Aug 2025 11:32:01 -0400 Subject: [PATCH 03/14] Update CreateDocker.php --- emhttp/plugins/dynamix.docker.manager/include/CreateDocker.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/emhttp/plugins/dynamix.docker.manager/include/CreateDocker.php b/emhttp/plugins/dynamix.docker.manager/include/CreateDocker.php index 4c067d06b..4f54ad238 100644 --- a/emhttp/plugins/dynamix.docker.manager/include/CreateDocker.php +++ b/emhttp/plugins/dynamix.docker.manager/include/CreateDocker.php @@ -1186,7 +1186,7 @@ _(Use Tailscale)_:
invert):?> _(Warning)_: -: Tailscale Key expired! Renew/Disable key expiry for ''. +: Tailscale Key expired! Renew/Disable key expiry for ''. _(Warning)_: : Tailscale Key will expire in days?> days! Disable Key Expiry for ''. From b4d059949d0a230183028612d7e1105d0076f36c Mon Sep 17 00:00:00 2001 From: SimonFair <39065407+SimonFair@users.noreply.github.com> Date: Wed, 6 Aug 2025 21:03:27 +0100 Subject: [PATCH 04/14] Fix: Dont all ' in file path --- .../dynamix.vm.manager/VMSettings.page | 66 ++++++++++++++++++- 1 file changed, 63 insertions(+), 3 deletions(-) diff --git a/emhttp/plugins/dynamix.vm.manager/VMSettings.page b/emhttp/plugins/dynamix.vm.manager/VMSettings.page index 578307739..2e9b715d8 100644 --- a/emhttp/plugins/dynamix.vm.manager/VMSettings.page +++ b/emhttp/plugins/dynamix.vm.manager/VMSettings.page @@ -119,7 +119,7 @@ $libvirt_log = file_exists("/var/log/libvirt/libvirtd.log");   : -
+ @@ -180,7 +180,7 @@ _(Libvirt storage location)_: _(Default VM storage path)_: -: +: _(Modify with caution: unable to validate path until Array is Started)_ @@ -188,7 +188,7 @@ _(Default VM storage path)_: :vms_libvirt_storage_help: _(Default ISO storage path)_: -: +: _(Modify with caution: unable to validate path until Array is Started)_ @@ -364,6 +364,66 @@ function btrfsScrub(path) { } }); } + +function validatePath(input) { + if (input.value.includes("'")) { + input.setCustomValidity(_("Single quote ' is not allowed in the path.")_); + input.reportValidity(); + + } else { + input.setCustomValidity(""); + } + input.reportValidity(); +} + +// Validate both domaindir and mediadir on submit +function validateFormOnSubmit() { + const domaindir = document.getElementById('domaindir'); + const mediadir = document.getElementById('mediadir'); + + // Run validation + validatePath(domaindir); + validatePath(mediadir); + + // Check validity in order, and focus the first invalid field + if (!domaindir.checkValidity()) { + domaindir.reportValidity(); + domaindir.focus(); + return false; + } + + if (!mediadir.checkValidity()) { + mediadir.reportValidity(); + mediadir.focus(); + return false; + } + + // Both valid + return true; +} + +document.getElementById('settingsForm').addEventListener('submit', function(e) { + if (!validateFormOnSubmit()) { + e.preventDefault(); + } +}); + +// Attach validation on input events +['domaindir', 'mediadir'].forEach(id => { + const input = document.getElementById(id); + input.addEventListener('input', () => validatePath(input)); +}); + +// Hook into Unraid fileTreeAttach for both fields +$('.filepicker').each(function() { + const input = this; + $(input).fileTreeAttach(null, null, function(folder) { + $(input).val(folder); + validatePath(input); + $(document).trigger('close.fileTree'); + }); +}); + $(function(){ $.post("/plugins/dynamix.vm.manager/include/Fedora-virtio-isos.php",{},function(isos) { $('#winvirtio_select').html(isos).prop('disabled',false).change().each(function(){$(this).on('change',function() { From 0bbf7116d8b735c467aff309ff54311953b4b805 Mon Sep 17 00:00:00 2001 From: SimonFair <39065407+SimonFair@users.noreply.github.com> Date: Wed, 6 Aug 2025 21:07:35 +0100 Subject: [PATCH 05/14] Update emhttp/plugins/dynamix.vm.manager/VMSettings.page Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> --- emhttp/plugins/dynamix.vm.manager/VMSettings.page | 2 -- 1 file changed, 2 deletions(-) diff --git a/emhttp/plugins/dynamix.vm.manager/VMSettings.page b/emhttp/plugins/dynamix.vm.manager/VMSettings.page index 2e9b715d8..199278e9f 100644 --- a/emhttp/plugins/dynamix.vm.manager/VMSettings.page +++ b/emhttp/plugins/dynamix.vm.manager/VMSettings.page @@ -368,8 +368,6 @@ function btrfsScrub(path) { function validatePath(input) { if (input.value.includes("'")) { input.setCustomValidity(_("Single quote ' is not allowed in the path.")_); - input.reportValidity(); - } else { input.setCustomValidity(""); } From ec795ac882d75e2fe7d73f93487b8ba424c8ec8a Mon Sep 17 00:00:00 2001 From: Squidly271 Date: Sat, 9 Aug 2025 23:15:46 -0400 Subject: [PATCH 06/14] Fix: Prevent nchan scripts from spawning Also, if a script is listed as it is supposed to be running and it isn't, then restart it --- .../plugins/dynamix/include/DefaultPageLayout.php | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/emhttp/plugins/dynamix/include/DefaultPageLayout.php b/emhttp/plugins/dynamix/include/DefaultPageLayout.php index c6eccfd38..6be9484a4 100644 --- a/emhttp/plugins/dynamix/include/DefaultPageLayout.php +++ b/emhttp/plugins/dynamix/include/DefaultPageLayout.php @@ -64,12 +64,15 @@ if (count($pages)) { $start = array_diff($nchan, $running); // returns any new scripts to be started $stop = array_diff($running, $nchan); // returns any old scripts to be stopped $running = array_merge($start, $running); // update list of current running nchan scripts - // start nchan scripts which are new - foreach ($start as $row) { + // start nchan scripts which are new or have been terminated without updating nchan.pid + foreach ($running as $row) { $script = explode(':', $row)[0]; - exec("$docroot/$script &>/dev/null &"); + exec("pgrep --ns $$ -f ".escapeshellarg("$docroot/$script"), $output, $retval); + if ($retval==1) { + exec(escapeshellarg("$docroot/$script")." &>/dev/null &"); + } } - // stop nchan scripts with the :stop option + // stop nchan scripts with the :stop option foreach ($stop as $row) { [$script, $opt] = my_explode(':', $row); if ($opt == 'stop') { @@ -78,7 +81,7 @@ if (count($pages)) { } } if (count($running)) { - file_put_contents($nchan_pid, implode("\n", $running) . "\n"); + file_put_contents_atomic($nchan_pid, implode("\n", $running) . "\n"); } else { @unlink($nchan_pid); } @@ -163,4 +166,4 @@ foreach ($pages as $page) { - \ No newline at end of file + From 6030f7f2f98ebbaa0501b5053494f6f54ed3bec2 Mon Sep 17 00:00:00 2001 From: Squidly271 Date: Sun, 10 Aug 2025 22:23:30 -0400 Subject: [PATCH 07/14] Coderabbitai suggestions --- .../dynamix/include/DefaultPageLayout.php | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/emhttp/plugins/dynamix/include/DefaultPageLayout.php b/emhttp/plugins/dynamix/include/DefaultPageLayout.php index 6be9484a4..c41bbae24 100644 --- a/emhttp/plugins/dynamix/include/DefaultPageLayout.php +++ b/emhttp/plugins/dynamix/include/DefaultPageLayout.php @@ -64,14 +64,19 @@ if (count($pages)) { $start = array_diff($nchan, $running); // returns any new scripts to be started $stop = array_diff($running, $nchan); // returns any old scripts to be stopped $running = array_merge($start, $running); // update list of current running nchan scripts - // start nchan scripts which are new or have been terminated without updating nchan.pid + // start nchan scripts which are new or have been stopped foreach ($running as $row) { - $script = explode(':', $row)[0]; - exec("pgrep --ns $$ -f ".escapeshellarg("$docroot/$script"), $output, $retval); - if ($retval==1) { - exec(escapeshellarg("$docroot/$script")." &>/dev/null &"); + if (in_array($row, $stop, true)) { + continue; + } + $script = explode(':', $row, 2)[0]; + $output = []; + exec('pgrep --ns $$ -f ' . escapeshellarg("$docroot/$script"),$output,$retval); + if ($retval !== 0) { // 0=found; 1=none; 2=error + exec(escapeshellarg("$docroot/$script") . ' >/dev/null 2>&1 &'); } } + // stop nchan scripts with the :stop option foreach ($stop as $row) { [$script, $opt] = my_explode(':', $row); @@ -166,4 +171,4 @@ foreach ($pages as $page) { - + \ No newline at end of file From f52e77d15baa4cfbb9abd80f3ff3799606bfd926 Mon Sep 17 00:00:00 2001 From: Squidly271 Date: Mon, 11 Aug 2025 12:22:10 -0400 Subject: [PATCH 08/14] Refactor: Remove support for :stop nchan option --- emhttp/plugins/dynamix/include/DefaultPageLayout.php | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/emhttp/plugins/dynamix/include/DefaultPageLayout.php b/emhttp/plugins/dynamix/include/DefaultPageLayout.php index c41bbae24..a869ed1e0 100644 --- a/emhttp/plugins/dynamix/include/DefaultPageLayout.php +++ b/emhttp/plugins/dynamix/include/DefaultPageLayout.php @@ -62,13 +62,9 @@ foreach ($allPages as $page) { if (count($pages)) { $running = file_exists($nchan_pid) ? file($nchan_pid, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES) : []; $start = array_diff($nchan, $running); // returns any new scripts to be started - $stop = array_diff($running, $nchan); // returns any old scripts to be stopped $running = array_merge($start, $running); // update list of current running nchan scripts // start nchan scripts which are new or have been stopped foreach ($running as $row) { - if (in_array($row, $stop, true)) { - continue; - } $script = explode(':', $row, 2)[0]; $output = []; exec('pgrep --ns $$ -f ' . escapeshellarg("$docroot/$script"),$output,$retval); @@ -77,14 +73,6 @@ if (count($pages)) { } } - // stop nchan scripts with the :stop option - foreach ($stop as $row) { - [$script, $opt] = my_explode(':', $row); - if ($opt == 'stop') { - exec('pkill --ns $$ -f '.escapeshellarg($docroot.'/'.$script).' &>/dev/null &'); - array_splice($running, array_search($row, $running), 1); - } - } if (count($running)) { file_put_contents_atomic($nchan_pid, implode("\n", $running) . "\n"); } else { From edf61fd90fd0d334a4cf97cd87c49f339473eb56 Mon Sep 17 00:00:00 2001 From: Squidly271 Date: Mon, 11 Aug 2025 12:57:11 -0400 Subject: [PATCH 09/14] Fix: write nchan.pid before starting scripts to avoid possible race conditions --- .../dynamix/include/DefaultPageLayout.php | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/emhttp/plugins/dynamix/include/DefaultPageLayout.php b/emhttp/plugins/dynamix/include/DefaultPageLayout.php index a869ed1e0..cc5e088a4 100644 --- a/emhttp/plugins/dynamix/include/DefaultPageLayout.php +++ b/emhttp/plugins/dynamix/include/DefaultPageLayout.php @@ -63,18 +63,17 @@ if (count($pages)) { $running = file_exists($nchan_pid) ? file($nchan_pid, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES) : []; $start = array_diff($nchan, $running); // returns any new scripts to be started $running = array_merge($start, $running); // update list of current running nchan scripts - // start nchan scripts which are new or have been stopped - foreach ($running as $row) { - $script = explode(':', $row, 2)[0]; - $output = []; - exec('pgrep --ns $$ -f ' . escapeshellarg("$docroot/$script"),$output,$retval); - if ($retval !== 0) { // 0=found; 1=none; 2=error - exec(escapeshellarg("$docroot/$script") . ' >/dev/null 2>&1 &'); - } - } - + // start nchan scripts which are new or have been terminated but still should be running if (count($running)) { file_put_contents_atomic($nchan_pid, implode("\n", $running) . "\n"); + foreach ($running as $row) { + $script = explode(':', $row, 2)[0]; + $output = []; + exec('pgrep --ns $$ -f ' . escapeshellarg("$docroot/$script"),$output,$retval); + if ($retval !== 0) { // 0=found; 1=none; 2=error + exec(escapeshellarg("$docroot/$script") . ' >/dev/null 2>&1 &'); + } + } } else { @unlink($nchan_pid); } From 585dd8533b7fd392c5cc17a2178fd85015f3f40e Mon Sep 17 00:00:00 2001 From: Zack Spear Date: Mon, 11 Aug 2025 13:35:56 -0700 Subject: [PATCH 10/14] fix: change tooltip position to fixed for better visibility and functionality --- emhttp/plugins/dynamix/styles/default-base.css | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/emhttp/plugins/dynamix/styles/default-base.css b/emhttp/plugins/dynamix/styles/default-base.css index 1ea00a0ef..fd8a458c0 100644 --- a/emhttp/plugins/dynamix/styles/default-base.css +++ b/emhttp/plugins/dynamix/styles/default-base.css @@ -74,9 +74,11 @@ a.info span { display: none; white-space: nowrap; font-variant: small-caps; - position: absolute; - top: 16px; - left: 12px; + /* + - Must be fixed to avoid CSS limitation with overflow-x: auto; on TableContainer as overflow-y: visible; with that is not supported. + - Lack of position values - top, right, bottom, left - will cause the tooltip to be positioned relative to the parent element. + */ + position: fixed; line-height: 2rem; color: var(--text-color); padding: 5px 8px; From 331d4ebf947f7fdd0550e395dcad7b12b7d78bd0 Mon Sep 17 00:00:00 2001 From: Zack Spear Date: Mon, 11 Aug 2025 14:27:11 -0700 Subject: [PATCH 11/14] feat: add tooltip positioning logic for a.info elements on mouse enter --- .../include/DefaultPageLayout/BodyInlineJS.php | 16 ++++++++++++++++ emhttp/plugins/dynamix/styles/default-base.css | 2 +- 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/emhttp/plugins/dynamix/include/DefaultPageLayout/BodyInlineJS.php b/emhttp/plugins/dynamix/include/DefaultPageLayout/BodyInlineJS.php index 8b14cbf57..2824db650 100644 --- a/emhttp/plugins/dynamix/include/DefaultPageLayout/BodyInlineJS.php +++ b/emhttp/plugins/dynamix/include/DefaultPageLayout/BodyInlineJS.php @@ -570,4 +570,20 @@ function fillAvailableHeight(params = { // default params // Add the new listener window.addEventListener('resize', window.fillAvailableHeightResizeHandler); } + +/** + * For every a.info element, we see if it has an inner span element. + * While the CSS will determine visibility, we still need to use JS to set the position of the "tooltip" span. + * Using the a.info element's offset position, we can calculate the top and left position needed for the span. + */ +$(document).on('mouseenter', 'a.info', function() { + const tooltip = $(this).find('span'); + if (tooltip.length) { + const aInfoPosition = $(this).offset(); + const addtionalOffset = 16; + const top = aInfoPosition.top + addtionalOffset; + const left = aInfoPosition.left + addtionalOffset; + tooltip.css({ top, left }); + } +}); diff --git a/emhttp/plugins/dynamix/styles/default-base.css b/emhttp/plugins/dynamix/styles/default-base.css index fd8a458c0..f9f17ea28 100644 --- a/emhttp/plugins/dynamix/styles/default-base.css +++ b/emhttp/plugins/dynamix/styles/default-base.css @@ -76,7 +76,7 @@ a.info span { font-variant: small-caps; /* - Must be fixed to avoid CSS limitation with overflow-x: auto; on TableContainer as overflow-y: visible; with that is not supported. - - Lack of position values - top, right, bottom, left - will cause the tooltip to be positioned relative to the parent element. + - position values are determined by JS in BodyInlineJS.php w/ the a.info element's offset position. */ position: fixed; line-height: 2rem; From 9a011f03db3f97253b1a58eecc16510cc035f98d Mon Sep 17 00:00:00 2001 From: Zack Spear Date: Mon, 11 Aug 2025 14:44:58 -0700 Subject: [PATCH 12/14] style: fix fileTree top position in dialog content styling in Browse.css --- emhttp/plugins/dynamix/sheets/Browse.css | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/emhttp/plugins/dynamix/sheets/Browse.css b/emhttp/plugins/dynamix/sheets/Browse.css index 6a284d761..5c8f300cc 100644 --- a/emhttp/plugins/dynamix/sheets/Browse.css +++ b/emhttp/plugins/dynamix/sheets/Browse.css @@ -110,6 +110,14 @@ table.tablesorter.indexer tbody tr:hover td { background-color: var(--browse-table-tbody-tr-hover-td-bg-color); } +.ui-dialog-content dd { + position: relative; + + .fileTree { + top: 4rem; + } +} + .Theme--black { tr.ace_optionsMenuEntry td select { color: var(--browse-text-color); From 63135b62970b508a0d7d3a92fe920ca30dc0702f Mon Sep 17 00:00:00 2001 From: Zack Spear Date: Mon, 11 Aug 2025 15:27:49 -0700 Subject: [PATCH 13/14] style: update dialog and filter input styling in Browse.page, BrowseButton.css, and default-dynamix.css --- emhttp/plugins/dynamix/Browse.page | 5 +- .../plugins/dynamix/sheets/BrowseButton.css | 27 +--- .../dynamix/styles/default-dynamix.css | 144 +++++++++--------- 3 files changed, 83 insertions(+), 93 deletions(-) diff --git a/emhttp/plugins/dynamix/Browse.page b/emhttp/plugins/dynamix/Browse.page index a745e1b96..d67495468 100644 --- a/emhttp/plugins/dynamix/Browse.page +++ b/emhttp/plugins/dynamix/Browse.page @@ -271,6 +271,8 @@ function fileEdit(id) { } function fullWindow() { + // this class is used to determine if the dialog is sized via the default CSS in default-dynamix.css or by JS when the user clicks the "expand" button. + $('.ui-dialog').toggleClass('ui-dialog-content-full'); if ($('.ui-dfm .ui-dialog-titlebar-close').html().indexOf('expand')>=0) { dfm.window.dialog('option','height',window.innerHeight-40); dfm.window.dialog('option','width',window.innerWidth); @@ -999,7 +1001,8 @@ $(function(){ } else { url.push(''); } - $('span.left').html(url.join('')).append(''); + $('.title .left').html(url.join('')); + $('.title .right').append(''); table = $('table.indexer'); thead = table.find('thead'); table.bind('sortEnd',function(e,t){ diff --git a/emhttp/plugins/dynamix/sheets/BrowseButton.css b/emhttp/plugins/dynamix/sheets/BrowseButton.css index 5742c5fb6..1a99c5ddd 100644 --- a/emhttp/plugins/dynamix/sheets/BrowseButton.css +++ b/emhttp/plugins/dynamix/sheets/BrowseButton.css @@ -165,21 +165,19 @@ i.job { span.dfm_filter { position: relative; - margin-left: 12px; - top: -2px; } span.dfm_filter i { position: absolute; left: 10px; - top: 4px; + top: 6px; font-size: 1.4rem; } input.dfm_filter { border: none; width: 100px; background-color: var(--input-dfm-filter-bg-color); - margin: -8px 0 0 0; padding-left: 30px; + line-height: normal; } input.dfm_filter:focus { background-color: var(--input-dfm-filter-bg-color); @@ -187,29 +185,10 @@ input.dfm_filter:focus { input#dfm_target { color: var(--input-dfm-target-text-color); } -/* .fileTree { - width: 500px; - max-height: 320px; -} */ -i.dfm_filter { - margin-top: -2px; -} div.autoheight { width: 100%; overflow-y: auto; } #dfm_jobs { padding: 2rem 0; -} -.Theme--sidebar { - span.dfm_filter { - margin-left: 0; - top: -8px; - } - span.dfm_filter i { - top: 8px; - } - i.dfm_filter { - margin-top: -4px; - } -} +} \ No newline at end of file diff --git a/emhttp/plugins/dynamix/styles/default-dynamix.css b/emhttp/plugins/dynamix/styles/default-dynamix.css index 756ee368f..a2aae6037 100644 --- a/emhttp/plugins/dynamix/styles/default-dynamix.css +++ b/emhttp/plugins/dynamix/styles/default-dynamix.css @@ -1460,7 +1460,18 @@ div.icon-zip { } .ui-dialog { - /* Center the dialog no matter what */ + box-sizing: border-box; + + * { + box-sizing: border-box; + } +} + +.ui-dialog:not(.ui-dialog-content-full) { + /* + - If there is no .ui-dialog-content-full class, then we need to center the dialog no matter what the library JS sets on the element. + - Otherwise, if we do have .ui-dialog-content-full on the element, then we need to use the library JS to position the dialog at "full screen" size. + */ top: 50% !important; left: 50% !important; transform: translate(-50%, -50%) !important; @@ -1468,10 +1479,6 @@ div.icon-zip { width: 100% !important; max-width: 100rem; - * { - box-sizing: border-box; - } - .ui-dialog-content { display: flex; flex-direction: column; @@ -1492,75 +1499,76 @@ div.icon-zip { margin-top: auto; } - .ui-dialog-buttonpane { - .ui-dialog-buttonset { - button { - font-family: clear-sans; - font-size: 1.1rem; - font-weight: bold; - letter-spacing: 2px; - text-transform: uppercase; - margin: 10px 12px 10px 0; - padding: 9px 18px; - text-decoration: none; - white-space: nowrap; - cursor: pointer; - outline: none; - border-radius: 4px; - border: 0; - color: var(--dynamix-jquery-ui-button-text-color); - background: - -webkit-gradient( - linear, - left top, - right top, - from(var(--dynamix-jquery-ui-button-background-start)), - to(var(--dynamix-jquery-ui-button-background-end)) - ) - 0 0 no-repeat, - -webkit-gradient( - linear, - left top, - right top, - from(var(--dynamix-jquery-ui-button-background-start)), - to(var(--dynamix-jquery-ui-button-background-end)) - ) 0 100% no-repeat, - -webkit-gradient( - linear, - left bottom, - left top, - from(var(--dynamix-jquery-ui-button-background-start)), - to(var(--dynamix-jquery-ui-button-background-start)) - ) 0 100% no-repeat, - -webkit-gradient( - linear, - left bottom, - left top, - from(var(--dynamix-jquery-ui-button-background-end)), - to(var(--dynamix-jquery-ui-button-background-end)) - ) 100% 100% no-repeat; - background: - linear-gradient(90deg, var(--dynamix-jquery-ui-button-background-start) 0, var(--dynamix-jquery-ui-button-background-end)) 0 0 no-repeat, - linear-gradient(90deg, var(--dynamix-jquery-ui-button-background-start) 0, var(--dynamix-jquery-ui-button-background-end)) 0 100% no-repeat, - linear-gradient(0deg, var(--dynamix-jquery-ui-button-background-start) 0, var(--dynamix-jquery-ui-button-background-start)) 0 100% no-repeat, - linear-gradient(0deg, var(--dynamix-jquery-ui-button-background-end) 0, var(--dynamix-jquery-ui-button-background-end)) 100% 100% no-repeat; - background-size: - 100% 2px, - 100% 2px, - 2px 100%, - 2px 100%; +} - &:hover { - color: var(--dynamix-jquery-ui-button-hover-color); - background: -webkit-gradient( +.ui-dialog-buttonpane { + .ui-dialog-buttonset { + button { + font-family: clear-sans; + font-size: 1.1rem; + font-weight: bold; + letter-spacing: 2px; + text-transform: uppercase; + margin: 10px 12px 10px 0; + padding: 9px 18px; + text-decoration: none; + white-space: nowrap; + cursor: pointer; + outline: none; + border-radius: 4px; + border: 0; + color: var(--dynamix-jquery-ui-button-text-color); + background: + -webkit-gradient( linear, left top, right top, from(var(--dynamix-jquery-ui-button-background-start)), to(var(--dynamix-jquery-ui-button-background-end)) - ); - background: linear-gradient(90deg, var(--dynamix-jquery-ui-button-background-start) 0, var(--dynamix-jquery-ui-button-background-end)); - } + ) + 0 0 no-repeat, + -webkit-gradient( + linear, + left top, + right top, + from(var(--dynamix-jquery-ui-button-background-start)), + to(var(--dynamix-jquery-ui-button-background-end)) + ) 0 100% no-repeat, + -webkit-gradient( + linear, + left bottom, + left top, + from(var(--dynamix-jquery-ui-button-background-start)), + to(var(--dynamix-jquery-ui-button-background-start)) + ) 0 100% no-repeat, + -webkit-gradient( + linear, + left bottom, + left top, + from(var(--dynamix-jquery-ui-button-background-end)), + to(var(--dynamix-jquery-ui-button-background-end)) + ) 100% 100% no-repeat; + background: + linear-gradient(90deg, var(--dynamix-jquery-ui-button-background-start) 0, var(--dynamix-jquery-ui-button-background-end)) 0 0 no-repeat, + linear-gradient(90deg, var(--dynamix-jquery-ui-button-background-start) 0, var(--dynamix-jquery-ui-button-background-end)) 0 100% no-repeat, + linear-gradient(0deg, var(--dynamix-jquery-ui-button-background-start) 0, var(--dynamix-jquery-ui-button-background-start)) 0 100% no-repeat, + linear-gradient(0deg, var(--dynamix-jquery-ui-button-background-end) 0, var(--dynamix-jquery-ui-button-background-end)) 100% 100% no-repeat; + background-size: + 100% 2px, + 100% 2px, + 2px 100%, + 2px 100%; + + &:hover { + color: var(--dynamix-jquery-ui-button-hover-color); + background: -webkit-gradient( + linear, + left top, + right top, + from(var(--dynamix-jquery-ui-button-background-start)), + to(var(--dynamix-jquery-ui-button-background-end)) + ); + background: linear-gradient(90deg, var(--dynamix-jquery-ui-button-background-start) 0, var(--dynamix-jquery-ui-button-background-end)); } } } From 58e8dc86a7619795fc938cec42b61a83f8720c1b Mon Sep 17 00:00:00 2001 From: Zack Spear Date: Mon, 11 Aug 2025 16:39:52 -0700 Subject: [PATCH 14/14] fix: footer layout and styles for improved responsiveness - Added a footer spacer div to enhance layout structure. - Changed footer display to grid for better alignment on larger screens. - Adjusted footer spacer visibility for mobile and desktop views. --- .../dynamix/include/DefaultPageLayout/Footer.php | 1 + emhttp/plugins/dynamix/styles/default-base.css | 13 ++++++++----- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/emhttp/plugins/dynamix/include/DefaultPageLayout/Footer.php b/emhttp/plugins/dynamix/include/DefaultPageLayout/Footer.php index 59712c806..e7efc1c7f 100644 --- a/emhttp/plugins/dynamix/include/DefaultPageLayout/Footer.php +++ b/emhttp/plugins/dynamix/include/DefaultPageLayout/Footer.php @@ -56,6 +56,7 @@ function getArrayStatus($var) {
+