Use latest version of vnu to validate HTML5#553
Conversation
The heading "h4" (with computed level 4) follows the heading "h2" (with computed level 2), skipping 1 heading level.
The heading "h4" (with computed level 4) follows the heading "h1" (with computed level 1), skipping 2 heading levels.
The heading "h3" (with computed level 3) follows the heading "h1" (with computed level 1), skipping 1 heading level.
and interacts badly with unquoted attribute values
Fixes these vnu warnings: - The language attribute on the script element is obsolete. Use the type attribute instead. - The type attribute is unnecessary for JavaScript resources.
The type attribute for the style element is not needed and should be omitted.
Trailing slash on void elements has no effect and interacts badly with unquoted attribute values.
Trailing slash on void elements has no effect and interacts badly with unquoted attribute values.
Trailing slash on void elements has no effect and interacts badly with unquoted attribute values.
Trailing slash on void elements has no effect and interacts badly with unquoted attribute values.
|
Warning Rate limit exceeded
You’ve run out of usage credits. Purchase more in the billing tab. ⌛ How to resolve this issue?After the wait time has elapsed, a review can be triggered using the We recommend that you space out your commits to avoid hitting the rate limit. 🚦 How do rate limits work?CodeRabbit enforces hourly rate limits for each developer per organization. Our paid plans have higher rate limits than the trial, open-source and free plans. In all cases, we re-allow further reviews after a brief timeout. Please see our FAQ for further information. ℹ️ Review info⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: CHILL Plan: Pro Run ID: 📒 Files selected for processing (4)
WalkthroughThis PR modernizes the codebase's HTML markup to HTML5 standards: removing self-closing XHTML-style slashes, deprecated ChangesHTML5 Modernization Sweep
Estimated code review effort🎯 3 (Moderate) | ⏱️ ~25 minutes Possibly related PRs
Suggested reviewers
🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
Actionable comments posted: 2
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (3)
application/views/main/users/add_user.php (1)
9-29:⚠️ Potential issue | 🟡 Minor | ⚡ Quick winIncomplete self-closing slash removal –
realname,phone_number, andusernameinputs still use/>syntax.Lines 12, 17, and 22 retain XHTML-style
/>on<input>tags while the password inputs directly below were updated. Since the PR objective is full HTML5 compliance validated by vnu, these will still trigger validator errors.🐛 Proposed fix
- <input type="text" name="realname" id="realname" value="..." class="text ui-widget-content ui-corner-all" /> + <input type="text" name="realname" id="realname" value="..." class="text ui-widget-content ui-corner-all"> ... - <input type="text" name="phone_number" id="phone_number" value="..." class="text ui-widget-content ui-corner-all" /> + <input type="text" name="phone_number" id="phone_number" value="..." class="text ui-widget-content ui-corner-all"> ... - <input type="text" name="username" id="username" value="..." class="text ui-widget-content ui-corner-all" /> + <input type="text" name="username" id="username" value="..." class="text ui-widget-content ui-corner-all">🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@application/views/main/users/add_user.php` around lines 9 - 29, The three input elements for realname, phone_number and username still use the XHTML self-closing "/>" syntax; update the <input> tags identified by id="realname", id="phone_number" and id="username" to use plain HTML5 void element syntax (remove the trailing slash) so they match the password inputs and pass the vnu HTML5 validator..github/workflows/codeigniter.yml (1)
99-107:⚠️ Potential issue | 🟠 Major | ⚡ Quick win
releaseId: 'latest'is not valid — CI download step will likely fail.The
robinraju/release-downloaderaction expectsreleaseIdto be a numeric GitHub release ID (e.g.,releaseId: '123123'); the string'latest'is not a documented or supported value for that field. To download from the latest release, uselatest: trueand omitreleaseIdentirely.The current combination of
latest: false+releaseId: 'latest'will produce an API error or silently download the wrong artifact, breaking every CI run that needsvnu.jar.🐛 Proposed fix
- uses: robinraju/release-downloader@v1 with: repository: 'validator/validator' - latest: false - releaseId: 'latest' + latest: true fileName: 'vnu.jar' tarBall: false zipBall: false out-file-path: 'utils'🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In @.github/workflows/codeigniter.yml around lines 99 - 107, The workflow step using the robinraju/release-downloader action is passing an invalid releaseId ('latest') while latest is false; update the step that references releaseId, latest, fileName (vnu.jar) and out-file-path (utils) to either set latest: true and remove the releaseId field entirely to fetch the latest release, or replace releaseId: 'latest' with a numeric GitHub release ID string (e.g., '123123') if you want a specific release.application/views/main/dashboard/statistic.php (1)
93-113:⚠️ Potential issue | 🟡 Minor | ⚡ Quick winThree parallel
<h1>elements for sub-section panel labels — accessibility concern"Folders", "My folders", and "Phonebook" are side-by-side summary panels within the statistics view, not independent primary page sections. Promoting all three from
<h4>to<h1>creates three equal-rank level-1 headings on the same page without any sectioning context (<section>,<article>, etc.).The
h1is for the page title only. Having multipleh1elements on a web page is bad practice, for accessibility and for SEO — it creates a flat and meaningless structure. Headings should reflect the real structure of the page rather than visual styling choices, helping users understand how content is organised. Screen readers that present a heading outline to users would surface three "level 1" headings with no clear primary entry point.The CSS approach of restyling
h1elements to appear visually smaller via selectors inbase.cssachieves the visual goal, buth2(orh3) would be semantically correct for these panel labels whileh1is reserved for the page's primary heading.♻️ Proposed fix
- <h1><?php echo tr('Folders');?>: </h1> + <h2><?php echo tr('Folders');?>: </h2> ... - <h1><?php echo tr('My folders');?>: </h1> + <h2><?php echo tr('My folders');?>: </h2> ... - <h1><?php echo tr('Phonebook');?>: </h1> + <h2><?php echo tr('Phonebook');?>: </h2>🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@application/views/main/dashboard/statistic.php` around lines 93 - 113, The three panel titles currently use top-level headings (<h1><?php echo tr('Folders');?>: </h1>, <h1><?php echo tr('My folders');?>: </h1>, <h1><?php echo tr('Phonebook');?>: </h1>) which incorrectly create multiple h1s; change these to a lower-level semantic heading (e.g., <h2> or <h3>) so the page retains a single primary h1 and each panel has an appropriate subheading, and optionally wrap each panel in a section element with aria-labelledby pointing to the new heading ID for better accessibility.
🧹 Nitpick comments (7)
application/plugins/soap/views/index.php (3)
132-166: 💤 Low valueConsider removing commented-out code.
This notification view section is commented out. If it's no longer needed, consider removing it entirely and relying on version control history. If it's planned for future use, consider adding a TODO comment explaining the intent.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@application/plugins/soap/views/index.php` around lines 132 - 166, The block of commented-out HTML starting with <!--div id="space_area"> and containing the notification plugin UI (elements like id="addnotificationbutton", id="notification", class="simplebutton", and the "Notification" header) should be removed or documented; either delete this entire commented-out section to clean the view or replace the HTML comment with a brief TODO explaining why the notification markup is preserved for future use (e.g., "TODO: retain notification UI for feature X"), ensuring you remove the large commented block or add the TODO comment in place of it.
57-68: ⚖️ Poor tradeoffConsider refactoring to semantic table structure.
The hidden header row is a workaround for validation. A cleaner HTML5 approach would use explicit
<thead>and<tbody>elements with proper semantic structure.♻️ Potential refactor to semantic table structure
Replace the hidden row with proper table structure:
<table class="nice-table"> - <tr style="display: none"> - <!-- this is a hack to pass validation https://stackoverflow.com/a/52175495 --> - <th></th> - ... - </tr> + <thead> <tr> <th class="nice-table-left">No.</th> ... </tr> + </thead> + <tbody> <?php ... ?> + </tbody> + <tfoot> <tr> <th colspan="8" class="nice-table-footer"> ... </th> </tr> + </tfoot> </table>🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@application/plugins/soap/views/index.php` around lines 57 - 68, The table currently uses a hidden <tr> hack to satisfy validation; instead update the markup for the element with class "nice-table" to use a semantic table structure: add a <thead> containing actual <th> cells (use descriptive text or visually-hidden labels) and move the data rows into a <tbody>, removing the display:none hidden row; ensure each header uses <th scope="col"> (or scope="row" where appropriate) so the existing rendering and accessibility remain intact.
123-126: ⚡ Quick winConsider fixing the "notifiy" field name misspelling as part of planned refactoring.
The field name
notifiyat line 126 is a misspelling of "notify" and is used consistently across the view and controller (checked atapplication/plugins/soap/controllers/Soap.php:41). While the naming is internally consistent and functional, the TODO comment at line 83 of the controller suggests this may be part of a planned refactoring effort. Coordinate any fix across both the form field name and the corresponding server-side post data validation.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@application/plugins/soap/views/index.php` around lines 123 - 126, Rename the misspelled form field name/id "notifiy" to "notify" in the view (input name="notifiy" id="notifiy" -> name="notify" id="notify") and update any server-side references that expect "notifiy" (e.g., the POST key check in the Soap controller where "notifiy" is referenced) to use "notify"; ensure the controller's validation and any uses in methods (e.g., the POST handling logic in Soap::whatever method that checks $_POST['notifiy']) are updated accordingly, and optionally add a short compatibility branch that also accepts the old "notifiy" key during the transition.media/css/base.css (1)
556-565: 💤 Low valueConsider shorthand
marginto reduce verbosity.The four separate
margin-*properties can be collapsed. Minor nit only.♻️ Proposed shorthand
.dash_box h1 { /* default style of h4 */ display: block; font-size: 1em; - margin-top: 1.33em; - margin-bottom: 1.33em; - margin-left: 0; - margin-right: 0; + margin: 1.33em 0; font-weight: bold; }article.plugin h1 { /* Apply default value for h3 */ display: block; font-size: 1.17em; - margin-top: 1em; - margin-bottom: 1em; - margin-left: 0; - margin-right: 0; + margin: 1em 0; font-weight: bold; }🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@media/css/base.css` around lines 556 - 565, The CSS block for the selector .dash_box h1 uses four separate margin properties; replace margin-top, margin-bottom, margin-left and margin-right with a single margin shorthand on the .dash_box h1 rule (e.g., margin: 1.33em 0;) to collapse those declarations and reduce verbosity while preserving layout.application/views/main/search.php (1)
7-23: ⚡ Quick winIncomplete
/>cleanup on text inputs.The two text
<input>elements (lines 10 and 22) still carry the XHTML-style trailing/>that this PR removes everywhere else, while the adjacent submit inputs were cleaned up. Within the same file the style is now mixed.♻️ Proposed fix
- <td><input type="text" name="search_name" id="search" value="..." class="ui-corner-left" /></td> + <td><input type="text" name="search_name" id="search" value="..." class="ui-corner-left"></td>(Apply the same change to the
search_smsinput on line 22.)🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@application/views/main/search.php` around lines 7 - 23, The two text input tags still use XHTML-style self-closing "/>"; update the input elements for search_name and search_sms (the inputs with name="search_name" and name="search_sms", both id="search") to use the same HTML-style closing as the submit inputs by removing the trailing slash so they end with ">" instead of "/>".application/views/main/login.php (1)
53-56: ⚡ Quick winAssociate labels to inputs for better accessibility.
At Line 53 and Line 56, add
forattributes and anidon the password input so labels are announced correctly by assistive tech.Suggested fix
- <td><label><?php echo tr('Username'); ?></label><input type="text" name="username" id="username" style="width:95%"></td> + <td><label for="username"><?php echo tr('Username'); ?></label><input type="text" name="username" id="username" style="width:95%"></td> - <td><label><?php echo tr('Password'); ?></label><input type="password" name="password" style="width:95%"></td> + <td><label for="password"><?php echo tr('Password'); ?></label><input type="password" id="password" name="password" style="width:95%"></td>🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@application/views/main/login.php` around lines 53 - 56, The labels for the username and password inputs are not properly associated with their inputs; update the Username label to include for="username" (it already has input id="username") and add an id (e.g., id="password") to the password input and update the Password label to for="password" so screen readers can announce them correctly (modify the label and the password <input> element in application/views/main/login.php).tests/controllers/Pluginss_test.php (1)
163-163: ⚡ Quick winMake assertions less brittle than exact inline-style HTML strings.
At Line 163 and the related assertions, matching the full
styleattribute over-couples tests to presentation details. Prefer matching heading/text semantics (or regex on<h1[^>]*>), so harmless style refactors don’t break these tests.Example adjustment
- $this->_assertStringContainsString('<h1 style="color: `#000`">Blacklist Number</h1>', $output); + $this->assertMatchesRegularExpression('/<h1[^>]*>\s*Blacklist Number\s*<\/h1>/', $output); - $this->assertThat($output, $this->logicalNot($this->stringContains('<h1 style="color: `#000`">'.$plugin_label.'</h1>'))); + $this->assertThat($output, $this->logicalNot($this->stringContains('>'.$plugin_label.'</h1>')));Also applies to: 439-439, 483-483, 519-519, 557-557, 575-575
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@tests/controllers/Pluginss_test.php` at line 163, The assertion using $this->_assertStringContainsString('<h1 style="color: `#000`">Blacklist Number</h1>', $output) is brittle because it ties tests to inline styles; change the check to assert the semantic heading/text instead (e.g., use $this->_assertStringContainsString('Blacklist Number', $output) or use a regex/assertMatchesRegularExpression against '<h1[^>]*>\\s*Blacklist Number\\s*</h1>') so the test on Pluginss_test.php targets the heading content via _assertStringContainsString or assertMatchesRegularExpression with $output rather than the exact style attribute.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@application/views/main/base.php`:
- Around line 58-60: The call to htmlentities is missing the ENT_QUOTES flag
because the closing parenthesis is misplaced, causing ENT_QUOTES to be passed to
filter_data (which only accepts one argument); update both occurrences so
htmlentities receives ENT_QUOTES and filter_data is called with just its single
string argument—i.e., wrap the result of htmlentities(..., ENT_QUOTES) (for the
expressions using
$this->Kalkun_model->get_gammu_info('gammu_version')->row('Client') and
->get_gammu_info('db_version')->row('Version')) and pass that single value into
filter_data, preserving the strval() on the first occurrence.
In `@application/views/main/install/layout.php`:
- Line 47: Change the sidebar heading in the install layout from an h1 to an h2
to ensure each install page has a single main h1; specifically update the
element that renders "<?php echo tr('Installation steps'); ?>" in
application/views/main/install/layout.php from h1 to h2 and then adjust the CSS
selector in media/css/install.css (update "#right-container h1" to
"#right-container h2") so styling is preserved.
---
Outside diff comments:
In @.github/workflows/codeigniter.yml:
- Around line 99-107: The workflow step using the robinraju/release-downloader
action is passing an invalid releaseId ('latest') while latest is false; update
the step that references releaseId, latest, fileName (vnu.jar) and out-file-path
(utils) to either set latest: true and remove the releaseId field entirely to
fetch the latest release, or replace releaseId: 'latest' with a numeric GitHub
release ID string (e.g., '123123') if you want a specific release.
In `@application/views/main/dashboard/statistic.php`:
- Around line 93-113: The three panel titles currently use top-level headings
(<h1><?php echo tr('Folders');?>: </h1>, <h1><?php echo tr('My folders');?>:
</h1>, <h1><?php echo tr('Phonebook');?>: </h1>) which incorrectly create
multiple h1s; change these to a lower-level semantic heading (e.g., <h2> or
<h3>) so the page retains a single primary h1 and each panel has an appropriate
subheading, and optionally wrap each panel in a section element with
aria-labelledby pointing to the new heading ID for better accessibility.
In `@application/views/main/users/add_user.php`:
- Around line 9-29: The three input elements for realname, phone_number and
username still use the XHTML self-closing "/>" syntax; update the <input> tags
identified by id="realname", id="phone_number" and id="username" to use plain
HTML5 void element syntax (remove the trailing slash) so they match the password
inputs and pass the vnu HTML5 validator.
---
Nitpick comments:
In `@application/plugins/soap/views/index.php`:
- Around line 132-166: The block of commented-out HTML starting with <!--div
id="space_area"> and containing the notification plugin UI (elements like
id="addnotificationbutton", id="notification", class="simplebutton", and the
"Notification" header) should be removed or documented; either delete this
entire commented-out section to clean the view or replace the HTML comment with
a brief TODO explaining why the notification markup is preserved for future use
(e.g., "TODO: retain notification UI for feature X"), ensuring you remove the
large commented block or add the TODO comment in place of it.
- Around line 57-68: The table currently uses a hidden <tr> hack to satisfy
validation; instead update the markup for the element with class "nice-table" to
use a semantic table structure: add a <thead> containing actual <th> cells (use
descriptive text or visually-hidden labels) and move the data rows into a
<tbody>, removing the display:none hidden row; ensure each header uses <th
scope="col"> (or scope="row" where appropriate) so the existing rendering and
accessibility remain intact.
- Around line 123-126: Rename the misspelled form field name/id "notifiy" to
"notify" in the view (input name="notifiy" id="notifiy" -> name="notify"
id="notify") and update any server-side references that expect "notifiy" (e.g.,
the POST key check in the Soap controller where "notifiy" is referenced) to use
"notify"; ensure the controller's validation and any uses in methods (e.g., the
POST handling logic in Soap::whatever method that checks $_POST['notifiy']) are
updated accordingly, and optionally add a short compatibility branch that also
accepts the old "notifiy" key during the transition.
In `@application/views/main/login.php`:
- Around line 53-56: The labels for the username and password inputs are not
properly associated with their inputs; update the Username label to include
for="username" (it already has input id="username") and add an id (e.g.,
id="password") to the password input and update the Password label to
for="password" so screen readers can announce them correctly (modify the label
and the password <input> element in application/views/main/login.php).
In `@application/views/main/search.php`:
- Around line 7-23: The two text input tags still use XHTML-style self-closing
"/>"; update the input elements for search_name and search_sms (the inputs with
name="search_name" and name="search_sms", both id="search") to use the same
HTML-style closing as the submit inputs by removing the trailing slash so they
end with ">" instead of "/>".
In `@media/css/base.css`:
- Around line 556-565: The CSS block for the selector .dash_box h1 uses four
separate margin properties; replace margin-top, margin-bottom, margin-left and
margin-right with a single margin shorthand on the .dash_box h1 rule (e.g.,
margin: 1.33em 0;) to collapse those declarations and reduce verbosity while
preserving layout.
In `@tests/controllers/Pluginss_test.php`:
- Line 163: The assertion using $this->_assertStringContainsString('<h1
style="color: `#000`">Blacklist Number</h1>', $output) is brittle because it ties
tests to inline styles; change the check to assert the semantic heading/text
instead (e.g., use $this->_assertStringContainsString('Blacklist Number',
$output) or use a regex/assertMatchesRegularExpression against
'<h1[^>]*>\\s*Blacklist Number\\s*</h1>') so the test on Pluginss_test.php
targets the heading content via _assertStringContainsString or
assertMatchesRegularExpression with $output rather than the exact style
attribute.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Pro
Run ID: 89de1230-4c67-46a3-a5a6-1212a5fc86d5
📒 Files selected for processing (76)
.github/workflows/codeigniter.ymlapplication/plugins/blacklist_number/views/index.phpapplication/plugins/blacklist_number/views/js_blacklist_number.phpapplication/plugins/server_alert/views/index.phpapplication/plugins/server_alert/views/js_server_alert.phpapplication/plugins/sms_credit/views/index.phpapplication/plugins/sms_credit/views/js_packages.phpapplication/plugins/sms_credit/views/js_users.phpapplication/plugins/sms_credit/views/packages.phpapplication/plugins/sms_member/views/js_member.phpapplication/plugins/sms_to_email/views/index.phpapplication/plugins/sms_to_wordpress/views/index.phpapplication/plugins/sms_to_wordpress/views/js_sms_to_wordpress.phpapplication/plugins/sms_to_xmpp/views/index.phpapplication/plugins/sms_to_xmpp/views/js_sms_to_xmpp.phpapplication/plugins/soap/views/index.phpapplication/plugins/soap/views/js_remote_access.phpapplication/plugins/stop_manager/views/index.phpapplication/plugins/stop_manager/views/js_stop_manager.phpapplication/plugins/whitelist_number/views/index.phpapplication/plugins/whitelist_number/views/js_whitelist_number.phpapplication/views/errors/html/error_404.phpapplication/views/errors/html/error_db.phpapplication/views/errors/html/error_exception.phpapplication/views/errors/html/error_general.phpapplication/views/errors/html/error_php.phpapplication/views/js_init/js_dashboard.phpapplication/views/js_init/js_filters.phpapplication/views/js_init/js_keyboard.phpapplication/views/js_init/js_layout.phpapplication/views/js_init/message/js_compose.phpapplication/views/js_init/message/js_conversation.phpapplication/views/js_init/message/js_function.phpapplication/views/js_init/phonebook/js_group.phpapplication/views/js_init/phonebook/js_phonebook.phpapplication/views/js_init/users/js_add_user.phpapplication/views/js_init/users/js_users.phpapplication/views/main/base.phpapplication/views/main/dashboard/home.phpapplication/views/main/dashboard/statistic.phpapplication/views/main/forgot_password.phpapplication/views/main/header.phpapplication/views/main/install/config_setup.phpapplication/views/main/install/database_setup.phpapplication/views/main/install/layout.phpapplication/views/main/install/requirement_check.phpapplication/views/main/install/welcome.phpapplication/views/main/layout.phpapplication/views/main/login.phpapplication/views/main/messages/compose.phpapplication/views/main/messages/conversation.phpapplication/views/main/messages/index.phpapplication/views/main/messages/message_list.phpapplication/views/main/password_reset.phpapplication/views/main/phonebook/contact/add_contact.phpapplication/views/main/phonebook/contact/index.phpapplication/views/main/phonebook/contact/pbk_list.phpapplication/views/main/phonebook/group/index.phpapplication/views/main/phonebook/group/pbk_list.phpapplication/views/main/plugin/index.phpapplication/views/main/search.phpapplication/views/main/settings/appearance.phpapplication/views/main/settings/filters.phpapplication/views/main/settings/general.phpapplication/views/main/settings/password.phpapplication/views/main/settings/personal.phpapplication/views/main/settings/setting.phpapplication/views/main/users/add_user.phpapplication/views/main/users/index.phpapplication/views/main/users/users_list.phpmedia/css/base.cssmedia/css/blue.cssmedia/css/install.csstests/controllers/Install_test.phptests/controllers/Messages_test.phptests/controllers/Pluginss_test.php
Fixes this error on the requirement checks page (which doesn't have a h2) - The heading "h3" (with computed level 3) follows the heading "h1" (with computed level 1), skipping 1 heading level.
cf8c3d5 to
5c388ab
Compare
Summary by CodeRabbit
New Features
Style
Chores