From 469f15883b599668f569bea8f10c772536646561 Mon Sep 17 00:00:00 2001 From: Zack Spear Date: Tue, 1 Jul 2025 16:04:27 -0700 Subject: [PATCH 1/8] feat: enhance page content generation with responsive layout support - Updated `generateContent` function to handle a new `ResponsiveLayout` flag in the page data array. - Added a wrapper for non-responsive content based on the `ResponsiveLayout` flag. - Adjusted CSS class naming for consistency in the `default-base.css` file. - Set `ResponsiveLayout` to false in `AddVM.page` and `UpdateVM.page` for default behavior. - Cleaned up HTML structure in `VMedit.php` to remove unnecessary class. This change improves the flexibility of page layouts and ensures proper styling for non-responsive content. --- emhttp/plugins/dynamix.vm.manager/AddVM.page | 1 + emhttp/plugins/dynamix.vm.manager/UpdateVM.page | 1 + .../plugins/dynamix.vm.manager/include/VMedit.php | 2 +- .../include/DefaultPageLayout/MainContent.php | 15 ++++++++++++--- emhttp/plugins/dynamix/styles/default-base.css | 2 +- 5 files changed, 16 insertions(+), 5 deletions(-) diff --git a/emhttp/plugins/dynamix.vm.manager/AddVM.page b/emhttp/plugins/dynamix.vm.manager/AddVM.page index 2e099b6b5..5da8dc9cf 100644 --- a/emhttp/plugins/dynamix.vm.manager/AddVM.page +++ b/emhttp/plugins/dynamix.vm.manager/AddVM.page @@ -2,6 +2,7 @@ Title="Add VM" Tag="clipboard" Cond="(pgrep('libvirtd')!==false)" Markdown="false" +ResponsiveLayout="false" --- "> -
+
diff --git a/emhttp/plugins/dynamix/include/DefaultPageLayout/MainContent.php b/emhttp/plugins/dynamix/include/DefaultPageLayout/MainContent.php index 81789a9a4..28d7e3266 100644 --- a/emhttp/plugins/dynamix/include/DefaultPageLayout/MainContent.php +++ b/emhttp/plugins/dynamix/include/DefaultPageLayout/MainContent.php @@ -115,17 +115,26 @@ function generatePanels($page, $path, $defaultIcon, $docroot, $useTabCookie = fa /** * Generates the content for a page * - * @param array $page Page data array containing text and Markdown flag + * @param array $page Page data array containing text, Markdown flag, and ResponsiveLayout flag * @return string Parsed text ready for eval * * Usage example: * '.generateContent($page)); ?> */ function generateContent($page) { + $content = ''; if (empty($page['Markdown']) || $page['Markdown'] == 'true') { - return Markdown(parse_text($page['text'])); + $content = Markdown(parse_text($page['text'])); + } else { + $content = parse_text($page['text']); } - return parse_text($page['text']); + + // Wrap in non-responsive div if specified + if (isset($page['ResponsiveLayout']) && $page['ResponsiveLayout'] === 'false') { + $content = '
' . $content . '
'; + } + + return $content; } ?> diff --git a/emhttp/plugins/dynamix/styles/default-base.css b/emhttp/plugins/dynamix/styles/default-base.css index a92688204..bf9e78a9c 100644 --- a/emhttp/plugins/dynamix/styles/default-base.css +++ b/emhttp/plugins/dynamix/styles/default-base.css @@ -1313,7 +1313,7 @@ a.list { } /* Necessary evil to prevent rewrites of complex page templates for responsive layout - i.e. VMedit.php */ -.Content--non-responsive { +.content--non-responsive { min-width: 1200px; } From fbad4a0be49684c09ffc10d10db3430ad1b7e5a4 Mon Sep 17 00:00:00 2001 From: Zack Spear Date: Tue, 1 Jul 2025 16:16:46 -0700 Subject: [PATCH 2/8] fix: remove 'narrow' class from color input fields in DisplaySettings.page for consistency --- emhttp/plugins/dynamix/DisplaySettings.page | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/emhttp/plugins/dynamix/DisplaySettings.page b/emhttp/plugins/dynamix/DisplaySettings.page index 1def58c8b..10f6d08bc 100644 --- a/emhttp/plugins/dynamix/DisplaySettings.page +++ b/emhttp/plugins/dynamix/DisplaySettings.page @@ -278,15 +278,15 @@ _(Used / Free columns)_: _(Header custom text color)_: -: +: :display_custom_text_color_help: _(Header custom secondary text color)_: -: +: _(Header custom background color)_: -: +: :display_custom_background_color_help: From d44573658940d879f1d37c2dd60f2102601c0187 Mon Sep 17 00:00:00 2001 From: Zack Spear Date: Tue, 1 Jul 2025 16:36:04 -0700 Subject: [PATCH 3/8] docs: add responsive webGUI plugin migration guide with common bugs and fixes - Introduced a new migration guide detailing common issues with non-responsive .page files. - Included examples of large buttons and misaligned settings labels, along with their fixes. - Added images to illustrate the bugs and their resolutions. This guide aims to assist developers in transitioning to the new responsive design system. --- docs/assets/pool-device-status-bug.png | Bin 0 -> 56088 bytes docs/assets/scrub-status-bug.png | Bin 0 -> 54913 bytes ...esponsive-webgui-plugin-migration-guide.md | 196 ++++++++++++++++++ 3 files changed, 196 insertions(+) create mode 100644 docs/assets/pool-device-status-bug.png create mode 100644 docs/assets/scrub-status-bug.png create mode 100644 docs/responsive-webgui-plugin-migration-guide.md diff --git a/docs/assets/pool-device-status-bug.png b/docs/assets/pool-device-status-bug.png new file mode 100644 index 0000000000000000000000000000000000000000..b2a29fc91b8fd4bd4d1b53e23276425a26c1cc00 GIT binary patch literal 56088 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 Ur4C2?aRC@zG5Zbqt4sVp03&fvp#T5? literal 0 HcmV?d00001 diff --git a/docs/assets/scrub-status-bug.png b/docs/assets/scrub-status-bug.png new file mode 100644 index 0000000000000000000000000000000000000000..b3ad91058e2162e07a2b435f9ec00de258862e05 GIT binary patch literal 54913 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 aW~%h9p8xgy+v3s=V~g&O37Zd`{(k_Y<+1tz literal 0 HcmV?d00001 diff --git a/docs/responsive-webgui-plugin-migration-guide.md b/docs/responsive-webgui-plugin-migration-guide.md new file mode 100644 index 000000000..a0c1d1ec4 --- /dev/null +++ b/docs/responsive-webgui-plugin-migration-guide.md @@ -0,0 +1,196 @@ +# Responsive WebGUI Plugin Migration Guide + +## Why Responsive? The Benefits for Unraid Users & Developers + +Unraid's webGUI has moved to a fully responsive design system. This isn't just a facelift—it's a fundamental shift in how plugins and core pages are built and rendered. Here's why this matters: + +- **Mobile & Tablet Friendly:** Manage your server from any device, any screen size, no more pinching/zooming. +- **Consistent Layouts:** No more broken forms or tables on small screens. Everything adapts. +- **Modern Look & Feel:** Cleaner, more professional UI that matches user expectations. +- **Future-Proof:** New features and plugins can be built once, work everywhere. +- **Accessibility:** Improved support for screen readers and keyboard navigation. + +**Bottom line:** Users get a better experience, and plugin devs spend less time fighting CSS and more time building features. + +--- + +## Prerequisite: How .page Files Are Parsed (Markdown, Whitespace, and Structure) + +Unraid's plugin system uses `.page` files, which are parsed using a custom Markdown engine. Understanding this is key to writing responsive plugins. + +### The Parsing Pipeline +1. **Header Parsing:** The top of the file (before `---`) is parsed as INI for metadata (Title, Menu, etc). +2. **Content Parsing:** The rest is parsed as Markdown, with special handling for translation (`_(text)_`) and definition lists. +3. **PHP Evaluation:** Any PHP code is executed after Markdown is processed. + +### Whitespace & Markdown Structure +- **Definition List Syntax:** + ```markdown + _(Label)_: + : + ``` + This is parsed into: + ```html +
+
Label
+
+
+ ``` +- **Whitespace is Critical:** + - The colon (`:`) must be at the start of the line, followed by a space. + - Indentation or extra spaces can break parsing, causing elements to fall outside the `
` structure. +- **Final Render:** + - The browser receives a series of `
`, `
`, and `
` elements, which are then styled by CSS. + - Responsive CSS expects this structure to apply correct flex/grid layouts. + +### Block Tags and Markdown Parsing + +By default, if you use a `
` (or any block-level HTML tag) in your `.page` file, **the contents inside that tag will NOT be parsed as markdown**. The markdown parser treats the contents as raw HTML and leaves them untouched. + +**If you want the contents of a `
` (or other block tag) to be parsed as markdown, you must add `markdown="1"` to the tag:** + +```html +
+ _(This will NOT be parsed as markdown)_ + : +
+``` + +**With `markdown="1"`:** +```html +
+ _(This WILL be parsed as markdown inside the div)_ + : +
+``` +Example 2 +**With `markdown="1"`:** +```html + +_(This WILL be parsed as markdown)_ +:
+ _(This WILL be parsed as markdown inside the div)_ + +
+``` + +This applies to all block-level tags (div, section, article, etc). Use `markdown="1"` if you need markdown parsing inside a custom container. + +### Why This Matters +If your markup doesn't follow the expected pattern, the CSS can't do its job. That's when you get broken layouts, giant buttons, or misaligned fields. + +--- + +## Common Bugs in Non-Responsive .page Files (and How to Fix Them) + +### 1. Large Buttons +**Bug:** Buttons stretch full width, look massive, or break the layout. + +![Example: Pool Device Status page with large, stretched Reset button](docs/assets/pool-device-status-bug.png) +*Pool Device Status page before fix: The Reset button is stretched and not visually grouped.* + +**Why:** +- On desktop screens, `
` uses `display: flex; flex-direction: column;` (see the responsive CSS). This means every direct child of `
`—including buttons, inputs, spans, etc.—is stacked vertically and stretched to the available width by default. +- If you put a button directly inside `
`, it becomes a flex item and will stretch to fill the column (unless it's inside a `` or similar inline container). +- Old markup: `_(Action)_: +: ` + +**Fix:** +- Wrap buttons in a `` (or `` for groups): + ```markdown + _(Action)_: + : + ``` +- For button groups: + ```markdown +   + : + + + + ``` + +### 2. Settings Label + Inputs Are Offset (Whitespace/Parsing Issue) +**Bug:** Labels and inputs don't line up, or inputs appear on a new line, not next to their label. + +![Example: Scrub Status page with offset labels and controls](docs/assets/scrub-status-bug.png) +*Scrub Status page before fix: Labels and controls are misaligned due to whitespace/structure issues.* + +**Why:** +- Extra spaces, tabs, or missing colons in the Markdown definition list syntax. +- Elements placed outside the `label: content` pattern aren't wrapped in `
`, `
`, `
`. + +**Fix:** +- Make sure every input is inside a definition list: + ```markdown + _(Setting Name)_: + : + ``` +- For elements with no label, use ` ` as the label: + ```markdown +   + : ... + ``` +- Remove rogue elements outside the definition structure. + +--- + +## Real-World Example: DeviceInfo.page + +**Before:** +```markdown + + +``` +- Buttons are outside the definition list, so they break the layout and look wrong on mobile. + +**After:** +```markdown +  +: + + + +``` +- Now the buttons are inside the `
`, `
`, `
` structure, and the CSS can lay them out responsively. + +**Screenshot Reference:** +- See attached images for examples of large buttons and offset fields before/after fixing the markup. + +--- + +## Summary +- Always use the definition list pattern for settings and controls. +- Wrap button groups in ``. +- Watch your whitespace and colons—Markdown parsing is strict. +- Test on mobile and desktop to catch layout issues early. + +--- + +## Quick Fix: Opting Out of Responsive Layout (If You're Short on Time) + +If you can't dedicate time right now to fully update your plugin for the new responsive system, you can temporarily opt out of the responsive CSS for your page. This will preserve the legacy layout and prevent your page from breaking, but **it is not a long-term solution**. + +### How to Opt Out +Add the following to the top (YAML header) of your `.page` file: + +```yaml +ResponsiveLayout="false" +``` + +**Example:** +```yaml +Title="Add VM" +Tag="clipboard" +Cond="(pgrep('libvirtd')!==false)" +Markdown="false" +ResponsiveLayout="false" +--- +``` + +See `AddVM.page` and `UpdateVM.page` for real-world examples of this approach. + +### What This Does +- Wraps your page content in a `
` that forces a **minimum width of 1200px** via CSS. This keeps your layout looking like the old (non-responsive) UI, even on smaller screens. +- Your page will not adapt to mobile or small window sizes—it will always be at least 1200px wide, and users may need to scroll horizontally on small devices. +- **This is a stopgap.** You should still plan to migrate to the responsive system for the best user experience and future compatibility. From 2e3d5939919604fb13c5db1b6410cc14ed0b4189 Mon Sep 17 00:00:00 2001 From: Zack Spear Date: Tue, 1 Jul 2025 16:38:52 -0700 Subject: [PATCH 4/8] fix: update image paths in migration guide for consistency - Corrected image paths in the responsive webGUI plugin migration guide to ensure they point to the correct location. - This change improves the clarity and accessibility of the guide's visual examples. No further changes are pending for this task. --- docs/responsive-webgui-plugin-migration-guide.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/responsive-webgui-plugin-migration-guide.md b/docs/responsive-webgui-plugin-migration-guide.md index a0c1d1ec4..61606f512 100644 --- a/docs/responsive-webgui-plugin-migration-guide.md +++ b/docs/responsive-webgui-plugin-migration-guide.md @@ -86,7 +86,7 @@ If your markup doesn't follow the expected pattern, the CSS can't do its job. Th ### 1. Large Buttons **Bug:** Buttons stretch full width, look massive, or break the layout. -![Example: Pool Device Status page with large, stretched Reset button](docs/assets/pool-device-status-bug.png) +![Example: Pool Device Status page with large, stretched Reset button](assets/pool-device-status-bug.png) *Pool Device Status page before fix: The Reset button is stretched and not visually grouped.* **Why:** @@ -113,7 +113,7 @@ If your markup doesn't follow the expected pattern, the CSS can't do its job. Th ### 2. Settings Label + Inputs Are Offset (Whitespace/Parsing Issue) **Bug:** Labels and inputs don't line up, or inputs appear on a new line, not next to their label. -![Example: Scrub Status page with offset labels and controls](docs/assets/scrub-status-bug.png) +![Example: Scrub Status page with offset labels and controls](assets/scrub-status-bug.png) *Scrub Status page before fix: Labels and controls are misaligned due to whitespace/structure issues.* **Why:** From 933aef25053d493a4d9c49d427cdfbafe38f8e58 Mon Sep 17 00:00:00 2001 From: Zack Spear Date: Tue, 1 Jul 2025 17:08:42 -0700 Subject: [PATCH 5/8] docs: update migration guide with new section on making wide tables responsive - Added a new section detailing how to use the TableContainer class for wide tables to ensure they remain usable on all screen sizes. - Included examples demonstrating the implementation before and after using the TableContainer class. - This update enhances the guide by providing clear instructions for developers dealing with wide tables. No further changes are pending for this task. --- ...esponsive-webgui-plugin-migration-guide.md | 44 ++++++++++++++++++- 1 file changed, 43 insertions(+), 1 deletion(-) diff --git a/docs/responsive-webgui-plugin-migration-guide.md b/docs/responsive-webgui-plugin-migration-guide.md index 61606f512..c4097e5ef 100644 --- a/docs/responsive-webgui-plugin-migration-guide.md +++ b/docs/responsive-webgui-plugin-migration-guide.md @@ -110,7 +110,7 @@ If your markup doesn't follow the expected pattern, the CSS can't do its job. Th ``` -### 2. Settings Label + Inputs Are Offset (Whitespace/Parsing Issue) +### 2. [Settings Label + Inputs Are Offset (Whitespace/Parsing Issue)] **Bug:** Labels and inputs don't line up, or inputs appear on a new line, not next to their label. ![Example: Scrub Status page with offset labels and controls](assets/scrub-status-bug.png) @@ -135,6 +135,48 @@ If your markup doesn't follow the expected pattern, the CSS can't do its job. Th --- +## Making Wide Tables Responsive: Using the TableContainer Class + +When you have tables with **a lot of columns** (wide tables) in your plugin, you should wrap them in a special container to ensure they remain usable on all screen sizes. The `TableContainer` class sets a **minimum width** on the table, so it doesn't shrink too small on mobile or narrow windows. This allows users to scroll horizontally to view the entire table, especially when there are many columns. + +### How to Use +- For tables with many columns (wide tables), wrap them in a `
`. +- For simple/narrow tables, this wrapper is usually not needed. + +### Why? +- Without this wrapper, wide tables may become too small to read or interact with at smaller screen sizes. +- The TableContainer class sets a `min-width` on the table and enables horizontal scrolling, so users can always access all columns, even on mobile. + +### Example: Before +```html + + + ... + + + ... + +
Col1Col2Col3ColN
............
+``` + +### Example: After +```html +
+ + + ... + + + ... + +
Col1Col2Col3ColN
............
+
+``` + +**Tip:** Only wrap the immediate table element—don't nest TableContainers or wrap unrelated content. + +--- + ## Real-World Example: DeviceInfo.page **Before:** From ab0475cdc1961d2a4d996d59205fd698e3a66c0f Mon Sep 17 00:00:00 2001 From: Zack Spear Date: Wed, 2 Jul 2025 13:50:23 -0700 Subject: [PATCH 6/8] docs: enhance migration guide with new sections and clarifications - Added a Table of Contents for easier navigation. - Updated the introduction to clarify the shift to responsive CSS. - Improved explanations for common bugs and fixes, including detailed examples and formatting adjustments. - Emphasized the importance of whitespace and structure in Markdown parsing. - Included a warning about opting out of responsive layout, with clear options for developers. This update aims to provide comprehensive guidance for developers transitioning to the responsive design system. No further changes are pending for this task. --- ...esponsive-webgui-plugin-migration-guide.md | 218 ++++++++++++++---- 1 file changed, 169 insertions(+), 49 deletions(-) diff --git a/docs/responsive-webgui-plugin-migration-guide.md b/docs/responsive-webgui-plugin-migration-guide.md index c4097e5ef..30176382f 100644 --- a/docs/responsive-webgui-plugin-migration-guide.md +++ b/docs/responsive-webgui-plugin-migration-guide.md @@ -1,16 +1,21 @@ # Responsive WebGUI Plugin Migration Guide +## Table of Contents + +- [Why Responsive? The Benefits for Unraid Users & Developers](#why-responsive-the-benefits-for-unraid-users--developers) +- [Prerequisite: How .page Files Are Parsed](#prerequisite-how-page-files-are-parsed-markdown-whitespace-and-structure) +- [Common Bugs in .page Files](#common-bugs-in-page-files-and-how-to-fix-them) +- [Making Wide Tables Responsive](#making-wide-tables-responsive-using-the-tablecontainer-class) +- [Summary](#summary) +- [Quick Fix: Opting Out of Responsive Layout](#quick-fix-opting-out-of-responsive-layout-if-youre-short-on-time) + ## Why Responsive? The Benefits for Unraid Users & Developers -Unraid's webGUI has moved to a fully responsive design system. This isn't just a facelift—it's a fundamental shift in how plugins and core pages are built and rendered. Here's why this matters: +Unraid's webGUI has been refactored to support responsive CSS. Here's why this matters: -- **Mobile & Tablet Friendly:** Manage your server from any device, any screen size, no more pinching/zooming. +- **Mobile & Tablet Friendly:** Manage your server from any device, any screen size, no more pinching/zooming required. - **Consistent Layouts:** No more broken forms or tables on small screens. Everything adapts. - **Modern Look & Feel:** Cleaner, more professional UI that matches user expectations. -- **Future-Proof:** New features and plugins can be built once, work everywhere. -- **Accessibility:** Improved support for screen readers and keyboard navigation. - -**Bottom line:** Users get a better experience, and plugin devs spend less time fighting CSS and more time building features. --- @@ -19,23 +24,29 @@ Unraid's webGUI has moved to a fully responsive design system. This isn't just a Unraid's plugin system uses `.page` files, which are parsed using a custom Markdown engine. Understanding this is key to writing responsive plugins. ### The Parsing Pipeline + 1. **Header Parsing:** The top of the file (before `---`) is parsed as INI for metadata (Title, Menu, etc). 2. **Content Parsing:** The rest is parsed as Markdown, with special handling for translation (`_(text)_`) and definition lists. 3. **PHP Evaluation:** Any PHP code is executed after Markdown is processed. ### Whitespace & Markdown Structure + - **Definition List Syntax:** + ```markdown _(Label)_: : ``` + This is parsed into: + ```html
Label
``` + - **Whitespace is Critical:** - The colon (`:`) must be at the start of the line, followed by a space. - Indentation or extra spaces can break parsing, causing elements to fall outside the `
` structure. @@ -57,51 +68,83 @@ By default, if you use a `
` (or any block-level HTML tag) in your `.page` f ``` **With `markdown="1"`:** + ```html
_(This WILL be parsed as markdown inside the div)_ :
``` -Example 2 -**With `markdown="1"`:** + +Example 2 **With `markdown="1"`:** + ```html _(This WILL be parsed as markdown)_ :
_(This WILL be parsed as markdown inside the div)_ +
+

This will not be parsed as markdown.

+

+

+
``` This applies to all block-level tags (div, section, article, etc). Use `markdown="1"` if you need markdown parsing inside a custom container. ### Why This Matters + If your markup doesn't follow the expected pattern, the CSS can't do its job. That's when you get broken layouts, giant buttons, or misaligned fields. --- -## Common Bugs in Non-Responsive .page Files (and How to Fix Them) +## Common Bugs in .page Files (and How to Fix Them) ### 1. Large Buttons + **Bug:** Buttons stretch full width, look massive, or break the layout. ![Example: Pool Device Status page with large, stretched Reset button](assets/pool-device-status-bug.png) *Pool Device Status page before fix: The Reset button is stretched and not visually grouped.* **Why:** + - On desktop screens, `
` uses `display: flex; flex-direction: column;` (see the responsive CSS). This means every direct child of `
`—including buttons, inputs, spans, etc.—is stacked vertically and stretched to the available width by default. - If you put a button directly inside `
`, it becomes a flex item and will stretch to fill the column (unless it's inside a `` or similar inline container). -- Old markup: `_(Action)_: -: ` +- Old markup: -**Fix:** -- Wrap buttons in a `` (or `` for groups): ```markdown _(Action)_: - : + : + : ``` + +**Fix:** + +- Wrap buttons in a `` (or `` for groups): + + ```markdown + _(Action)_: + : + +   + : + + + ``` + - For button groups: + - Before: + + ```markdown +   + : + ``` + + - After: + ```markdown   : @@ -110,28 +153,41 @@ If your markup doesn't follow the expected pattern, the CSS can't do its job. Th ``` -### 2. [Settings Label + Inputs Are Offset (Whitespace/Parsing Issue)] +### 2. Settings Label + Inputs Are Offset (Whitespace/Parsing Issue) + **Bug:** Labels and inputs don't line up, or inputs appear on a new line, not next to their label. ![Example: Scrub Status page with offset labels and controls](assets/scrub-status-bug.png) *Scrub Status page before fix: Labels and controls are misaligned due to whitespace/structure issues.* **Why:** + - Extra spaces, tabs, or missing colons in the Markdown definition list syntax. -- Elements placed outside the `label: content` pattern aren't wrapped in `
`, `
`, `
`. +- Elements placed outside the `label: content` pattern aren't wrapped in `
`, `
`, `
`. Or potentially two `
` elements adjacent to each other. **Fix:** -- Make sure every input is inside a definition list: + +- Make sure every input is inside a definition list and with a line break between each label + content pair: + ```markdown - _(Setting Name)_: + _(Setting One)_: + : + + _(Setting Two)_: + : + + _(Setting Three)_: : ``` + - For elements with no label, use ` ` as the label: + ```markdown   : ... ``` -- Remove rogue elements outside the definition structure. + +- Inspect the page source and clean up whitespace in an attempt to remove rogue elements outside the definition structure. --- @@ -140,14 +196,18 @@ If your markup doesn't follow the expected pattern, the CSS can't do its job. Th When you have tables with **a lot of columns** (wide tables) in your plugin, you should wrap them in a special container to ensure they remain usable on all screen sizes. The `TableContainer` class sets a **minimum width** on the table, so it doesn't shrink too small on mobile or narrow windows. This allows users to scroll horizontally to view the entire table, especially when there are many columns. ### How to Use + - For tables with many columns (wide tables), wrap them in a `
`. - For simple/narrow tables, this wrapper is usually not needed. +- **Test extensively at various screen sizes** and make your decision based on your own content display needs. ### Why? + - Without this wrapper, wide tables may become too small to read or interact with at smaller screen sizes. - The TableContainer class sets a `min-width` on the table and enables horizontal scrolling, so users can always access all columns, even on mobile. ### Example: Before + ```html @@ -160,6 +220,7 @@ When you have tables with **a lot of columns** (wide tables) in your plugin, you ``` ### Example: After + ```html
@@ -177,32 +238,8 @@ When you have tables with **a lot of columns** (wide tables) in your plugin, you --- -## Real-World Example: DeviceInfo.page - -**Before:** -```markdown - - -``` -- Buttons are outside the definition list, so they break the layout and look wrong on mobile. - -**After:** -```markdown -  -: - - - -``` -- Now the buttons are inside the `
`, `
`, `
` structure, and the CSS can lay them out responsively. - -**Screenshot Reference:** -- See attached images for examples of large buttons and offset fields before/after fixing the markup. - ---- - ## Summary -- Always use the definition list pattern for settings and controls. + - Wrap button groups in ``. - Watch your whitespace and colons—Markdown parsing is strict. - Test on mobile and desktop to catch layout issues early. @@ -211,9 +248,14 @@ When you have tables with **a lot of columns** (wide tables) in your plugin, you ## Quick Fix: Opting Out of Responsive Layout (If You're Short on Time) -If you can't dedicate time right now to fully update your plugin for the new responsive system, you can temporarily opt out of the responsive CSS for your page. This will preserve the legacy layout and prevent your page from breaking, but **it is not a long-term solution**. +**⚠️ WARNING: This is a temporary stopgap solution. You should plan to migrate to the responsive system for the best user experience and future compatibility.** + +If you can't dedicate time right now to update your plugin for the new responsive system, you can temporarily opt out of the responsive CSS for your page. This will preserve the legacy layout and prevent your page from breaking, but **it is not a long-term solution** and you should plan to migrate to the responsive system for the best user experience and future compatibility. + +There are two options + +### Option 1: Custom pages that don't utilize markdown parsing -### How to Opt Out Add the following to the top (YAML header) of your `.page` file: ```yaml @@ -221,6 +263,7 @@ ResponsiveLayout="false" ``` **Example:** + ```yaml Title="Add VM" Tag="clipboard" @@ -232,7 +275,84 @@ ResponsiveLayout="false" See `AddVM.page` and `UpdateVM.page` for real-world examples of this approach. -### What This Does -- Wraps your page content in a `
` that forces a **minimum width of 1200px** via CSS. This keeps your layout looking like the old (non-responsive) UI, even on smaller screens. -- Your page will not adapt to mobile or small window sizes—it will always be at least 1200px wide, and users may need to scroll horizontally on small devices. +Instead of using the `dl > dt + dd` structure, these pages use a different layout system that doesn't utilize markdown parsing. + +#### What This Does + +- Wraps your page content in a `
` that forces a **minimum width of 1200px** via CSS. This keeps your layout looking like the old (non-responsive) UI, even on smaller screens. +- Your page content will not adapt to mobile or small window sizes—it will always be at least 1200px wide, and users may need to scroll horizontally on small devices. - **This is a stopgap.** You should still plan to migrate to the responsive system for the best user experience and future compatibility. + +### Option 2: Wrap your custom elements in a `
` to force a min width of 1200px + +Let's say you have a `*.page` for your plugin. It has some settings that follow the standard `label: content` pattern that are get parsed into a `
`, `
`, `
` structure. + +But also on this page you have custom element(s) that are not parsed by the markdown parser and wrapped in the `dl > dt + dd` structure. Instead you maybe have a `
` that contains your plugin specific content. And instead that plugin specific content you have a complex layout. + +Before example: + +```html +_(Setting One)_: +: + +
+
+

Plugin Element

+
+
+

This is a plugin element

+
+
+ +_(Setting Two)_: +: + +
+
+

Plugin Element

+
+
+

This is a plugin element

+
+
+``` + +After example: + +```html +_(Setting One)_: +: + + +
+
+ ... +
+
+ + +
+ ... +
+ +_(Setting Two)_: +: + + +
+
+ ... +
+
+ + +
+ ... +
+``` + +The route you choose will depend on your specific use case. Explore the available options. + +If these specific examples don't apply to your plugin, you can still opt out of the responsive layout by adding `ResponsiveLayout="false"` to the top (YAML header) of your `.page` file. Or come up with your own solution for your specific use case. + +However, we highly recommend you migrate to the responsive system for the best user experience and future compatibility. From 39814d439f2007fe6b68e66c10c85d1d0eda2677 Mon Sep 17 00:00:00 2001 From: Zack Spear Date: Wed, 2 Jul 2025 13:51:41 -0700 Subject: [PATCH 7/8] feat: enhance non-responsive content styles in default-base.css - Reintroduced the .content--non-responsive class to maintain a minimum width for complex page templates. - Updated styles for definition lists to ensure proper layout and responsiveness. - Added specific input field max-widths to improve usability in non-responsive contexts. This change aims to ensure that non-responsive layouts are styled correctly while maintaining usability across various input types. No further changes are pending for this task. --- .../plugins/dynamix/styles/default-base.css | 48 +++++++++++++++++-- 1 file changed, 43 insertions(+), 5 deletions(-) diff --git a/emhttp/plugins/dynamix/styles/default-base.css b/emhttp/plugins/dynamix/styles/default-base.css index bf9e78a9c..1b5661f7f 100644 --- a/emhttp/plugins/dynamix/styles/default-base.css +++ b/emhttp/plugins/dynamix/styles/default-base.css @@ -1312,11 +1312,6 @@ a.list { } } -/* Necessary evil to prevent rewrites of complex page templates for responsive layout - i.e. VMedit.php */ -.content--non-responsive { - min-width: 1200px; -} - .tabs { display: flex; align-items: center; @@ -1576,6 +1571,49 @@ dd { } } +/* Necessary evil to prevent rewrites of complex page templates for responsive layout - i.e. VMedit.php */ +.content--non-responsive { + min-width: 1200px; + + /* override the dl > dt + dd responsive styles, inheriting the "desktop" styles defined below */ + dl { + grid-template-columns: 35% 1fr; + gap: 1.5rem 2rem; + } + dt { + text-align: right; + } + dd { + display: flex; + flex-direction: column; + gap: 0.5rem; + /* white-space: nowrap; */ + + input[type="text"], + input[type="password"], + input[type="number"], + input[type="url"], + input[type="email"], + input[type="date"], + input[type="file"], + input:not([type="submit"]), + input:not([type="button"]), + input:not([type="checkbox"]), + input:not([type="radio"]), + input:not([class*="narrow"]), + textarea, + .textarea, + select, + .ui-dropdownchecklist-selector-wrapper { + max-width: 400px; + } + + .narrow { + max-width: 150px !important; + } + } +} + /* Responsive styles for definition lists */ @media (min-width: 769px) { dl { From b22e503992b7edaa4a601e3f26f11ba6996c2bd3 Mon Sep 17 00:00:00 2001 From: Zack Spear Date: Thu, 3 Jul 2025 15:22:35 -0700 Subject: [PATCH 8/8] docs: remove outdated responsive webGUI plugin migration guide and associated images - Deleted the responsive webGUI plugin migration guide as it is no longer relevant. - Removed associated images that were part of the guide. This change cleans up the documentation by eliminating obsolete content. No further changes are pending for this task. --- docs/assets/pool-device-status-bug.png | Bin 56088 -> 0 bytes docs/assets/scrub-status-bug.png | Bin 54913 -> 0 bytes ...esponsive-webgui-plugin-migration-guide.md | 358 ------------------ 3 files changed, 358 deletions(-) delete mode 100644 docs/assets/pool-device-status-bug.png delete mode 100644 docs/assets/scrub-status-bug.png delete mode 100644 docs/responsive-webgui-plugin-migration-guide.md diff --git a/docs/assets/pool-device-status-bug.png b/docs/assets/pool-device-status-bug.png deleted file mode 100644 index b2a29fc91b8fd4bd4d1b53e23276425a26c1cc00..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 56088 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 Ur4C2?aRC@zG5Zbqt4sVp03&fvp#T5? diff --git a/docs/assets/scrub-status-bug.png b/docs/assets/scrub-status-bug.png deleted file mode 100644 index b3ad91058e2162e07a2b435f9ec00de258862e05..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 54913 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
di(K$Rn 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 aW~%h9p8xgy+v3s=V~g&O37Zd`{(k_Y<+1tz diff --git a/docs/responsive-webgui-plugin-migration-guide.md b/docs/responsive-webgui-plugin-migration-guide.md deleted file mode 100644 index 30176382f..000000000 --- a/docs/responsive-webgui-plugin-migration-guide.md +++ /dev/null @@ -1,358 +0,0 @@ -# Responsive WebGUI Plugin Migration Guide - -## Table of Contents - -- [Why Responsive? The Benefits for Unraid Users & Developers](#why-responsive-the-benefits-for-unraid-users--developers) -- [Prerequisite: How .page Files Are Parsed](#prerequisite-how-page-files-are-parsed-markdown-whitespace-and-structure) -- [Common Bugs in .page Files](#common-bugs-in-page-files-and-how-to-fix-them) -- [Making Wide Tables Responsive](#making-wide-tables-responsive-using-the-tablecontainer-class) -- [Summary](#summary) -- [Quick Fix: Opting Out of Responsive Layout](#quick-fix-opting-out-of-responsive-layout-if-youre-short-on-time) - -## Why Responsive? The Benefits for Unraid Users & Developers - -Unraid's webGUI has been refactored to support responsive CSS. Here's why this matters: - -- **Mobile & Tablet Friendly:** Manage your server from any device, any screen size, no more pinching/zooming required. -- **Consistent Layouts:** No more broken forms or tables on small screens. Everything adapts. -- **Modern Look & Feel:** Cleaner, more professional UI that matches user expectations. - ---- - -## Prerequisite: How .page Files Are Parsed (Markdown, Whitespace, and Structure) - -Unraid's plugin system uses `.page` files, which are parsed using a custom Markdown engine. Understanding this is key to writing responsive plugins. - -### The Parsing Pipeline - -1. **Header Parsing:** The top of the file (before `---`) is parsed as INI for metadata (Title, Menu, etc). -2. **Content Parsing:** The rest is parsed as Markdown, with special handling for translation (`_(text)_`) and definition lists. -3. **PHP Evaluation:** Any PHP code is executed after Markdown is processed. - -### Whitespace & Markdown Structure - -- **Definition List Syntax:** - - ```markdown - _(Label)_: - : - ``` - - This is parsed into: - - ```html -
-
Label
-
-
- ``` - -- **Whitespace is Critical:** - - The colon (`:`) must be at the start of the line, followed by a space. - - Indentation or extra spaces can break parsing, causing elements to fall outside the `
` structure. -- **Final Render:** - - The browser receives a series of `
`, `
`, and `
` elements, which are then styled by CSS. - - Responsive CSS expects this structure to apply correct flex/grid layouts. - -### Block Tags and Markdown Parsing - -By default, if you use a `
` (or any block-level HTML tag) in your `.page` file, **the contents inside that tag will NOT be parsed as markdown**. The markdown parser treats the contents as raw HTML and leaves them untouched. - -**If you want the contents of a `
` (or other block tag) to be parsed as markdown, you must add `markdown="1"` to the tag:** - -```html -
- _(This will NOT be parsed as markdown)_ - : -
-``` - -**With `markdown="1"`:** - -```html -
- _(This WILL be parsed as markdown inside the div)_ - : -
-``` - -Example 2 **With `markdown="1"`:** - -```html - -_(This WILL be parsed as markdown)_ -:
- _(This WILL be parsed as markdown inside the div)_ - -
-

This will not be parsed as markdown.

-

-

-
-
-``` - -This applies to all block-level tags (div, section, article, etc). Use `markdown="1"` if you need markdown parsing inside a custom container. - -### Why This Matters - -If your markup doesn't follow the expected pattern, the CSS can't do its job. That's when you get broken layouts, giant buttons, or misaligned fields. - ---- - -## Common Bugs in .page Files (and How to Fix Them) - -### 1. Large Buttons - -**Bug:** Buttons stretch full width, look massive, or break the layout. - -![Example: Pool Device Status page with large, stretched Reset button](assets/pool-device-status-bug.png) -*Pool Device Status page before fix: The Reset button is stretched and not visually grouped.* - -**Why:** - -- On desktop screens, `
` uses `display: flex; flex-direction: column;` (see the responsive CSS). This means every direct child of `
`—including buttons, inputs, spans, etc.—is stacked vertically and stretched to the available width by default. -- If you put a button directly inside `
`, it becomes a flex item and will stretch to fill the column (unless it's inside a `` or similar inline container). -- Old markup: - - ```markdown - _(Action)_: - : - : - ``` - -**Fix:** - -- Wrap buttons in a `` (or `` for groups): - - ```markdown - _(Action)_: - : - -   - : - - - ``` - -- For button groups: - - Before: - - ```markdown -   - : - ``` - - - After: - - ```markdown -   - : - - - - ``` - -### 2. Settings Label + Inputs Are Offset (Whitespace/Parsing Issue) - -**Bug:** Labels and inputs don't line up, or inputs appear on a new line, not next to their label. - -![Example: Scrub Status page with offset labels and controls](assets/scrub-status-bug.png) -*Scrub Status page before fix: Labels and controls are misaligned due to whitespace/structure issues.* - -**Why:** - -- Extra spaces, tabs, or missing colons in the Markdown definition list syntax. -- Elements placed outside the `label: content` pattern aren't wrapped in `
`, `
`, `
`. Or potentially two `
` elements adjacent to each other. - -**Fix:** - -- Make sure every input is inside a definition list and with a line break between each label + content pair: - - ```markdown - _(Setting One)_: - : - - _(Setting Two)_: - : - - _(Setting Three)_: - : - ``` - -- For elements with no label, use ` ` as the label: - - ```markdown -   - : ... - ``` - -- Inspect the page source and clean up whitespace in an attempt to remove rogue elements outside the definition structure. - ---- - -## Making Wide Tables Responsive: Using the TableContainer Class - -When you have tables with **a lot of columns** (wide tables) in your plugin, you should wrap them in a special container to ensure they remain usable on all screen sizes. The `TableContainer` class sets a **minimum width** on the table, so it doesn't shrink too small on mobile or narrow windows. This allows users to scroll horizontally to view the entire table, especially when there are many columns. - -### How to Use - -- For tables with many columns (wide tables), wrap them in a `
`. -- For simple/narrow tables, this wrapper is usually not needed. -- **Test extensively at various screen sizes** and make your decision based on your own content display needs. - -### Why? - -- Without this wrapper, wide tables may become too small to read or interact with at smaller screen sizes. -- The TableContainer class sets a `min-width` on the table and enables horizontal scrolling, so users can always access all columns, even on mobile. - -### Example: Before - -```html - - - ... - - - ... - -
Col1Col2Col3ColN
............
-``` - -### Example: After - -```html -
- - - ... - - - ... - -
Col1Col2Col3ColN
............
-
-``` - -**Tip:** Only wrap the immediate table element—don't nest TableContainers or wrap unrelated content. - ---- - -## Summary - -- Wrap button groups in ``. -- Watch your whitespace and colons—Markdown parsing is strict. -- Test on mobile and desktop to catch layout issues early. - ---- - -## Quick Fix: Opting Out of Responsive Layout (If You're Short on Time) - -**⚠️ WARNING: This is a temporary stopgap solution. You should plan to migrate to the responsive system for the best user experience and future compatibility.** - -If you can't dedicate time right now to update your plugin for the new responsive system, you can temporarily opt out of the responsive CSS for your page. This will preserve the legacy layout and prevent your page from breaking, but **it is not a long-term solution** and you should plan to migrate to the responsive system for the best user experience and future compatibility. - -There are two options - -### Option 1: Custom pages that don't utilize markdown parsing - -Add the following to the top (YAML header) of your `.page` file: - -```yaml -ResponsiveLayout="false" -``` - -**Example:** - -```yaml -Title="Add VM" -Tag="clipboard" -Cond="(pgrep('libvirtd')!==false)" -Markdown="false" -ResponsiveLayout="false" ---- -``` - -See `AddVM.page` and `UpdateVM.page` for real-world examples of this approach. - -Instead of using the `dl > dt + dd` structure, these pages use a different layout system that doesn't utilize markdown parsing. - -#### What This Does - -- Wraps your page content in a `
` that forces a **minimum width of 1200px** via CSS. This keeps your layout looking like the old (non-responsive) UI, even on smaller screens. -- Your page content will not adapt to mobile or small window sizes—it will always be at least 1200px wide, and users may need to scroll horizontally on small devices. -- **This is a stopgap.** You should still plan to migrate to the responsive system for the best user experience and future compatibility. - -### Option 2: Wrap your custom elements in a `
` to force a min width of 1200px - -Let's say you have a `*.page` for your plugin. It has some settings that follow the standard `label: content` pattern that are get parsed into a `
`, `
`, `
` structure. - -But also on this page you have custom element(s) that are not parsed by the markdown parser and wrapped in the `dl > dt + dd` structure. Instead you maybe have a `
` that contains your plugin specific content. And instead that plugin specific content you have a complex layout. - -Before example: - -```html -_(Setting One)_: -: - -
-
-

Plugin Element

-
-
-

This is a plugin element

-
-
- -_(Setting Two)_: -: - -
-
-

Plugin Element

-
-
-

This is a plugin element

-
-
-``` - -After example: - -```html -_(Setting One)_: -: - - -
-
- ... -
-
- - -
- ... -
- -_(Setting Two)_: -: - - -
-
- ... -
-
- - -
- ... -
-``` - -The route you choose will depend on your specific use case. Explore the available options. - -If these specific examples don't apply to your plugin, you can still opt out of the responsive layout by adding `ResponsiveLayout="false"` to the top (YAML header) of your `.page` file. Or come up with your own solution for your specific use case. - -However, we highly recommend you migrate to the responsive system for the best user experience and future compatibility.