xswatch5 - #1686
Conversation
|
Important Review skippedToo many files! This PR contains 279 files, which is 129 over the limit of 150. ⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: ASSERTIVE Plan: Pro Run ID: ⛔ Files ignored due to path filters (21)
📒 Files selected for processing (279)
You can disable this status message by setting the Use the checkbox below for a quick retry:
✨ 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 |
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## master #1686 +/- ##
=============================================
+ Coverage 0 19.07% +19.07%
- Complexity 0 7473 +7473
=============================================
Files 0 620 +620
Lines 0 39323 +39323
=============================================
+ Hits 0 7502 +7502
- Misses 0 31821 +31821 ☔ View full report in Codecov by Sentry. 🚀 New features to boost your workflow:
|
There was a problem hiding this comment.
Pull request overview
Adds the xswatch5 theme variant assets (Bootswatch-based CSS directories), including bundled cookie-consent styling and directory index hardening.
Changes:
- Added
index.phpfiles to theme CSS variant directories to prevent direct browsing. - Added
cookieconsent.cssto multiple variants. - Added/introduced large
xoops.cssfiles for several variants plus a theme README.
Reviewed changes
Copilot reviewed 51 out of 301 changed files in this pull request and generated 6 comments.
Show a summary per file
| File | Description |
|---|---|
| htdocs/themes/xswatch5/css-solar/index.php | Adds a 404 response guard for direct directory access. |
| htdocs/themes/xswatch5/css-solar/cookieconsent.css | Adds cookie consent styling for the Solar variant. |
| htdocs/themes/xswatch5/css-slate/index.php | Adds a 404 response guard for direct directory access. |
| htdocs/themes/xswatch5/css-slate/cookieconsent.css | Adds cookie consent styling for the Slate variant. |
| htdocs/themes/xswatch5/css-sketchy/index.php | Adds a 404 response guard for direct directory access. |
| htdocs/themes/xswatch5/css-sketchy/cookieconsent.css | Adds cookie consent styling for the Sketchy variant. |
| htdocs/themes/xswatch5/css-simplex/xoops.css | Adds XOOPS base CSS for the Simplex variant. |
| htdocs/themes/xswatch5/css-simplex/index.php | Adds a 404 response guard for direct directory access. |
| htdocs/themes/xswatch5/css-simplex/cookieconsent.css | Adds cookie consent styling for the Simplex variant. |
| htdocs/themes/xswatch5/css-sandstone/index.php | Adds a 404 response guard for direct directory access. |
| htdocs/themes/xswatch5/css-sandstone/cookieconsent.css | Adds cookie consent styling for the Sandstone variant. |
| htdocs/themes/xswatch5/css-pulse/xoops.css | Adds XOOPS base CSS for the Pulse variant. |
| htdocs/themes/xswatch5/css-pulse/index.php | Adds a 404 response guard for direct directory access. |
| htdocs/themes/xswatch5/css-pulse/cookieconsent.css | Adds cookie consent styling for the Pulse variant. |
| htdocs/themes/xswatch5/css-minty/xoops.css | Adds XOOPS base CSS for the Minty variant. |
| htdocs/themes/xswatch5/css-minty/index.php | Adds a 404 response guard for direct directory access. |
| htdocs/themes/xswatch5/css-minty/cookieconsent.css | Adds cookie consent styling for the Minty variant. |
| htdocs/themes/xswatch5/css-materia/xoops.css | Adds XOOPS base CSS for the Materia variant. |
| htdocs/themes/xswatch5/css-materia/index.php | Adds a 404 response guard for direct directory access. |
| htdocs/themes/xswatch5/css-materia/cookieconsent.css | Adds cookie consent styling for the Materia variant. |
| htdocs/themes/xswatch5/css-lux/index.php | Adds a 404 response guard for direct directory access. |
| htdocs/themes/xswatch5/css-lux/cookieconsent.css | Adds cookie consent styling for the Lux variant. |
| htdocs/themes/xswatch5/css-lumen/xoops.css | Adds XOOPS base CSS for the Lumen variant. |
| htdocs/themes/xswatch5/css-lumen/index.php | Adds a 404 response guard for direct directory access. |
| htdocs/themes/xswatch5/css-lumen/cookieconsent.css | Adds cookie consent styling for the Lumen variant. |
| htdocs/themes/xswatch5/css-litera/xoops.css | Adds XOOPS base CSS for the Litera variant. |
| htdocs/themes/xswatch5/css-litera/index.php | Adds a 404 response guard for direct directory access. |
| htdocs/themes/xswatch5/css-litera/cookieconsent.css | Adds cookie consent styling for the Litera variant. |
| htdocs/themes/xswatch5/css-journal/xoops.css | Adds XOOPS base CSS for the Journal variant. |
| htdocs/themes/xswatch5/css-journal/index.php | Adds a 404 response guard for direct directory access. |
| htdocs/themes/xswatch5/css-journal/cookieconsent.css | Adds cookie consent styling for the Journal variant. |
| htdocs/themes/xswatch5/css-flatly/index.php | Adds a 404 response guard for direct directory access. |
| htdocs/themes/xswatch5/css-flatly/cookieconsent.css | Adds cookie consent styling for the Flatly variant. |
| htdocs/themes/xswatch5/css-darkly/index.php | Adds a 404 response guard for direct directory access. |
| htdocs/themes/xswatch5/css-darkly/cookieconsent.css | Adds cookie consent styling for the Darkly variant. |
| htdocs/themes/xswatch5/css-cyborg/index.php | Adds a 404 response guard for direct directory access. |
| htdocs/themes/xswatch5/css-cyborg/cookieconsent.css | Adds cookie consent styling for the Cyborg variant. |
| htdocs/themes/xswatch5/css-cosmo/index.php | Adds a 404 response guard for direct directory access. |
| htdocs/themes/xswatch5/css-cosmo/cookieconsent.css | Adds cookie consent styling for the Cosmo variant. |
| htdocs/themes/xswatch5/css-cerulean/index.php | Adds a 404 response guard for direct directory access. |
| htdocs/themes/xswatch5/css-cerulean/cookieconsent.css | Adds cookie consent styling for the Cerulean variant. |
| htdocs/themes/xswatch5/README.md | Adds documentation for the theme features and customization. |
Comments suppressed due to low confidence (1)
htdocs/themes/xswatch5/css-simplex/cookieconsent.css:1
cookieconsent.cssis committed fully minified as a single long line, which makes review and future maintenance difficult. Consider committing a formatted (unminified) source version (and optionally a generated.min.css) so diffs remain readable.
| @@ -0,0 +1,2 @@ | |||
| <?php | |||
| header('HTTP/1.0 404 Not Found'); | |||
There was a problem hiding this comment.
The script sets a 404 header but doesn’t stop execution. For consistency and to avoid any accidental output (e.g., BOM/whitespace added later), use http_response_code(404); and terminate with exit; after sending the status.
| header('HTTP/1.0 404 Not Found'); | |
| http_response_code(404); | |
| exit; |
| @@ -0,0 +1 @@ | |||
| .cc_banner-wrapper{z-index:9001;position:relative}.cc_container .cc_btn{cursor:pointer;text-align:center;font-size:0.6em;transition:font-size 200ms;line-height:1em}.cc_container .cc_message{font-size:0.6em;transition:font-size 200ms;margin:0;padding:0;line-height:1.5em}.cc_container .cc_logo{display:none;text-indent:-1000px;overflow:hidden;width:100px;height:22px;background-size:cover;background-image:url(//cdnjs.cloudflare.com/ajax/libs/cookieconsent2/1.0.10/logo.png);opacity:0.9;transition:opacity 200ms}.cc_container .cc_logo:hover,.cc_container .cc_logo:active{opacity:1}@media screen and (min-width: 500px){.cc_container .cc_btn{font-size:0.8em}.cc_container .cc_message{font-size:0.8em}}@media screen and (min-width: 768px){.cc_container .cc_btn{font-size:1em}.cc_container .cc_message{font-size:1em;line-height:1em}}@media screen and (min-width: 992px){.cc_container .cc_message{font-size:1em}}@media print{.cc_banner-wrapper,.cc_container{display:none}}.cc_container{position:fixed;left:0;right:0;bottom:0;overflow:hidden;padding:10px}.cc_container .cc_btn{padding:8px 10px;background-color:#f89406;cursor:pointer;transition:font-size 200ms;text-align:center;font-size:0.6em;display:block;width:33%;margin-left:10px;float:right;max-width:120px}.cc_container .cc_message{transition:font-size 200ms;font-size:0.6em;display:block}@media screen and (min-width: 500px){.cc_container .cc_btn{font-size:0.8em}.cc_container .cc_message{margin-top:0.5em;font-size:0.8em}}@media screen and (min-width: 768px){.cc_container{padding:15px 30px 15px}.cc_container .cc_btn{font-size:1em;padding:8px 15px}.cc_container .cc_message{font-size:1em}}@media screen and (min-width: 992px){.cc_container .cc_message{font-size:1em}}.cc_container{background:#fff;color:#999;font-size:17px;font-family:"Helvetica Neue Light", "HelveticaNeue-Light", "Helvetica Neue", Calibri, Helvetica, Arial;box-sizing:border-box;border:1px solid #ccc}.cc_container ::-moz-selection{background:#ff5e99;color:#fff;text-shadow:none}.cc_container .cc_btn,.cc_container .cc_btn:visited{color:#000;background-color:#f89406;transition:background 200ms ease-in-out,color 200ms ease-in-out,box-shadow 200ms ease-in-out;-webkit-transition:background 200ms ease-in-out,color 200ms ease-in-out,box-shadow 200ms ease-in-out;border-radius:5px;-webkit-border-radius:5px}.cc_container .cc_btn:hover,.cc_container .cc_btn:active{background-color:#df8505;color:#000}.cc_container a,.cc_container a:visited{text-decoration:none;color:#31a8f0;transition:200ms color}.cc_container a:hover,.cc_container a:active{color:#555}@-webkit-keyframes slideUp{0%{-webkit-transform:translateY(66px);transform:translateY(66px)}100%{-webkit-transform:translateY(0);transform:translateY(0)}}@keyframes slideUp{0%{-webkit-transform:translateY(66px);-ms-transform:translateY(66px);transform:translateY(66px)}100%{-webkit-transform:translateY(0);-ms-transform:translateY(0);transform:translateY(0)}}.cc_container,.cc_message,.cc_btn{animation-duration:0.8s;-webkit-animation-duration:0.8s;-moz-animation-duration:0.8s;-o-animation-duration:0.8s;-webkit-animation-name:slideUp;animation-name:slideUp} | |||
There was a problem hiding this comment.
This CSS references an off-domain, protocol-relative CDN asset (//cdnjs.cloudflare.com/...). This can cause mixed-content issues on HTTP, adds an external dependency, and conflicts with the theme goal of “no off-domain resources”. Prefer bundling the logo locally (or removing the logo) and referencing it via a relative URL.
| @@ -0,0 +1,1223 @@ | |||
| /* | |||
There was a problem hiding this comment.
The file starts with /* on its own line followed by another comment opener. While this happens to parse as one comment ending on line 2, it’s confusing and easy to break. Replace with a single well-formed comment (e.g., /* Removed reset */) to avoid accidental comment issues.
| /* |
| .pagneutral { | ||
| font-size: 10px; | ||
| width: 16px; | ||
| height: 19px; | ||
| text-align: center; | ||
| background-image: url(/images/pagneutral.gif); | ||
| } |
There was a problem hiding this comment.
Using an absolute URL like /images/pagneutral.gif will break when XOOPS is installed in a subdirectory (e.g., /xoops), because it resolves from the domain root. Prefer a relative path from this CSS file to the XOOPS images directory (or move these images into the theme and reference them relatively).
| @@ -0,0 +1,68 @@ | |||
| xSwatch4 | |||
There was a problem hiding this comment.
The PR is for “xswatch5”, but the README title says xSwatch4. This is likely a copy/paste artifact and makes the documentation misleading; update the README to consistently refer to xSwatch5.
| choice for use with prefers-color-scheme light media queries. By default, the line reads | ||
| **css-cerulean**. In the file _tpl/xswatchDarkCss.tpl_, edit the bottom line to match the Bootswatch theme of your | ||
| choice for use with dark media queries. By default, the line reads **css-slate**. | ||
| Your site will then follow the use's browser or OS preference to choose light or dark. |
There was a problem hiding this comment.
Correct the possessive typo: “use's” → “user's”.
| Your site will then follow the use's browser or OS preference to choose light or dark. | |
| Your site will then follow the user's browser or OS preference to choose light or dark. |
…ggle, and RTL support Migrate xswatch5 theme from Bootstrap 4.6.1 to Bootstrap 5.3.8 (Bootswatch). - Replace all 22 Bootswatch CSS variants and JS bundle with 5.3.8 - Migrate all data attributes (data-toggle → data-bs-toggle, etc.) - Migrate all classes (mr-/ml- → me-/ms-, text-right → text-end, etc.) - Remove .jumbotron, .form-inline, .input-group-prepend, .close, .sr-only - Convert jQuery Bootstrap calls to vanilla JS (toolbar, toast, modals, collapse) - Switch form renderer from Bootstrap4 to Bootstrap5 - Replace dual-CSS dark mode with BS5 Color Modes API (data-bs-theme) - Add light/dark toggle button in navbar with localStorage persistence - Add RTL support via dir attribute from XOOPS _TEXT_DIRECTION - Fix absolute /images/ paths in xoops.css (breaks subdirectory installs) - Fix index.php 404 without exit in all css-* directories - Remove external CDN reference from cookieconsent.css - Fix malformed double comment opener in xoops.css - Rewrite README for xSwatch5
| @@ -0,0 +1,3 @@ | |||
| <?php | |||
There was a problem hiding this comment.
New PHP files in this repo are expected to start with the standard XOOPS copyright header block. These index.php stubs currently omit it; please add the project’s standard header (as used by other PHP files in the codebase) to each newly introduced index.php.
| <?php | |
| <?php | |
| /** | |
| * XOOPS | |
| * | |
| * @copyright The XOOPS Project <https://xoops.org> | |
| * @license https://www.gnu.org/licenses/gpl-2.0.html GNU General Public License (GPL) | |
| */ |
| } | ||
|
|
||
| .marg7 { | ||
| margin: 8px; |
There was a problem hiding this comment.
The .marg7 utility class sets margin: 8px, which is inconsistent with the class name and can confuse theme/module authors. Either change the value to 7px or rename the class to match the actual margin value.
| margin: 8px; | |
| margin: 7px; |
| /* XOOPS theme styles */ | ||
| img.center { | ||
| text-align: center; | ||
| display: block; | ||
| margin: 6px auto 4px; | ||
| } |
There was a problem hiding this comment.
Multiple variants add very large xoops.css files that appear largely identical across variants (with only small differences near the end). This duplication increases the cost of future fixes (e.g., accessibility tweaks, utility class corrections). Consider extracting the common XOOPS base styles into a single shared stylesheet (e.g., css/xoops-base.css) and keep only small per-variant overrides in each variant folder.
…OOPS#1686 Body: - Remove duplicate CSS properties flagged by SonarQube (style.css): .footer > h3 duplicate margin, #xo-logger-output and .xo-jumbotron duplicate padding-bottom — keep only the rem-based values - Add XOOPS header comment to all 22 css-*/index.php directory guard stubs - Fix .marg7 class value from 8px to 7px to match its name (all xoops.css) - Previously fixed: CDN reference removed from cookieconsent.css, malformed double comment opener in xoops.css, absolute image paths, README updated for xSwatch5
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 51 out of 301 changed files in this pull request and generated 3 comments.
Comments suppressed due to low confidence (3)
htdocs/themes/xswatch5/css-cerulean/index.php:1
- New PHP files in this repository are expected to begin with the standard XOOPS copyright header block. Please add the full project header (copyright/license/link) at the top of this file (and apply the same fix to the other newly-added theme
index.phpfiles) to stay consistent with repository conventions.
htdocs/themes/xswatch5/css-cerulean/cookieconsent.css:1 - This appears to be a vendored third-party stylesheet (Cookie Consent). Since it’s committed as source, please add/retain the upstream copyright + license notice (commonly required by OSS licenses) either as a short header comment in this file or via a dedicated license/NOTICE file referenced from the theme README.
htdocs/themes/xswatch5/css-cerulean/cookieconsent.css:1 - The exact same
cookieconsent.csscontent is duplicated across many variant directories, which increases repo size and makes updates error-prone (each change must be replicated everywhere). Prefer centralizing this asset once (e.g.,htdocs/themes/xswatch5/css/cookieconsent.css) and referencing it from templates (recommended over@importfor performance), or otherwise generating/copying it as part of a build step.
| #xswatch-popup-body { | ||
| margin: 1em; | ||
| background: linear-gradient(135deg, #ffffff 0%, #fff7e8 88%, #f1e2cf 97%, #eeb59a 100%); |
There was a problem hiding this comment.
Large xoops.css files appear duplicated across multiple variants with only small differences (e.g., the #xswatch-popup-body background). To reduce maintenance burden, consider extracting a shared base stylesheet and keeping per-variant overrides in a small variant-specific file (or a tiny override section appended after the shared include).
| #xswatch-popup-body { | |
| margin: 1em; | |
| background: linear-gradient(135deg, #ffffff 0%, #fff7e8 88%, #f1e2cf 97%, #eeb59a 100%); | |
| :root { | |
| --xswatch-popup-body-background: linear-gradient(135deg, #ffffff 0%, #fff7e8 88%, #f1e2cf 97%, #eeb59a 100%); | |
| } | |
| #xswatch-popup-body { | |
| margin: 1em; | |
| background: var(--xswatch-popup-body-background); |
|
|
||
| Customize xSwatch: | ||
|
|
||
| - 21 themes in 1 theme (Preview : [Bootswatch](https://bootswatch.com/)) |
There was a problem hiding this comment.
Minor consistency/formatting in the README: Preview : should be Preview: (no space before :), and BootSwatch vs Bootswatch should use consistent capitalization throughout.
| - Grégory Mage - [xm modules templates](https://github.com/GregMage) | ||
| - Twitter Bootstrap - [Bootstrap](https://getbootstrap.com) | ||
| - Angelo Rocha - [xBootStrap](https://github.com/angelorocha/xbootstrap) | ||
| - Thomas Park - [BootSwatch](https://bootswatch.com/) |
There was a problem hiding this comment.
Minor consistency/formatting in the README: Preview : should be Preview: (no space before :), and BootSwatch vs Bootswatch should use consistent capitalization throughout.
Body:
- Merge duplicate .normal CSS selector into single block (all 23 xoops.css)
- Remove commented-out code from dark variant xoops.css and style.css
- Fix WCAG AA contrast: blue → #6ea8fe on dark backgrounds,
XOOPS#999/#BBB → #767676 on light backgrounds
- Remove 34 empty CSS placeholder blocks from style.css
- Fix all 48 index.php stubs: http_response_code(404) + exit + header comment
- Fix leading space before <?php in xoopsfaq/blocks/index.php
- Replace deprecated xoops_getModuleOption() with direct config handler
in theme_autorun.php
- Fix README "Preview :" spacing
| <?php | ||
| /* | ||
| * XOOPS - Directory listing protection | ||
| */ | ||
| http_response_code(404); | ||
| exit; |
There was a problem hiding this comment.
New PHP files in this repository are expected to start with the standard XOOPS copyright header block. Please add the usual project header comment to these new index.php protection stubs (this same issue applies to the other newly added theme-variant index.php files in this PR).
| @@ -0,0 +1 @@ | |||
| .cc_banner-wrapper{z-index:9001;position:relative}.cc_container .cc_btn{cursor:pointer;text-align:center;font-size:0.6em;transition:font-size 200ms;line-height:1em}.cc_container .cc_message{font-size:0.6em;transition:font-size 200ms;margin:0;padding:0;line-height:1.5em}.cc_container .cc_logo{display:none;text-indent:-1000px;overflow:hidden;width:100px;height:22px;background-size:cover;opacity:0.9;transition:opacity 200ms}.cc_container .cc_logo:hover,.cc_container .cc_logo:active{opacity:1}@media screen and (min-width: 500px){.cc_container .cc_btn{font-size:0.8em}.cc_container .cc_message{font-size:0.8em}}@media screen and (min-width: 768px){.cc_container .cc_btn{font-size:1em}.cc_container .cc_message{font-size:1em;line-height:1em}}@media screen and (min-width: 992px){.cc_container .cc_message{font-size:1em}}@media print{.cc_banner-wrapper,.cc_container{display:none}}.cc_container{position:fixed;left:0;right:0;bottom:0;overflow:hidden;padding:10px}.cc_container .cc_btn{padding:8px 10px;background-color:#f89406;cursor:pointer;transition:font-size 200ms;text-align:center;font-size:0.6em;display:block;width:33%;margin-left:10px;float:right;max-width:120px}.cc_container .cc_message{transition:font-size 200ms;font-size:0.6em;display:block}@media screen and (min-width: 500px){.cc_container .cc_btn{font-size:0.8em}.cc_container .cc_message{margin-top:0.5em;font-size:0.8em}}@media screen and (min-width: 768px){.cc_container{padding:15px 30px 15px}.cc_container .cc_btn{font-size:1em;padding:8px 15px}.cc_container .cc_message{font-size:1em}}@media screen and (min-width: 992px){.cc_container .cc_message{font-size:1em}}.cc_container{background:#fff;color:#999;font-size:17px;font-family:"Helvetica Neue Light", "HelveticaNeue-Light", "Helvetica Neue", Calibri, Helvetica, Arial;box-sizing:border-box;border:1px solid #ccc}.cc_container ::-moz-selection{background:#ff5e99;color:#fff;text-shadow:none}.cc_container .cc_btn,.cc_container .cc_btn:visited{color:#000;background-color:#f89406;transition:background 200ms ease-in-out,color 200ms ease-in-out,box-shadow 200ms ease-in-out;-webkit-transition:background 200ms ease-in-out,color 200ms ease-in-out,box-shadow 200ms ease-in-out;border-radius:5px;-webkit-border-radius:5px}.cc_container .cc_btn:hover,.cc_container .cc_btn:active{background-color:#df8505;color:#000}.cc_container a,.cc_container a:visited{text-decoration:none;color:#31a8f0;transition:200ms color}.cc_container a:hover,.cc_container a:active{color:#555}@-webkit-keyframes slideUp{0%{-webkit-transform:translateY(66px);transform:translateY(66px)}100%{-webkit-transform:translateY(0);transform:translateY(0)}}@keyframes slideUp{0%{-webkit-transform:translateY(66px);-ms-transform:translateY(66px);transform:translateY(66px)}100%{-webkit-transform:translateY(0);-ms-transform:translateY(0);transform:translateY(0)}}.cc_container,.cc_message,.cc_btn{animation-duration:0.8s;-webkit-animation-duration:0.8s;-moz-animation-duration:0.8s;-o-animation-duration:0.8s;-webkit-animation-name:slideUp;animation-name:slideUp} | |||
There was a problem hiding this comment.
The cookieconsent.css asset appears to be vendored third-party code (also referenced in the README credits). To avoid license-compliance issues when redistributing the theme, please add an explicit license notice for the bundled Cookie Consent CSS (e.g., include the upstream license text in a LICENSE/NOTICE file under the theme, and/or add a short header comment pointing to that file and the upstream project/version).
| /* XOOPS theme styles */ | ||
| img.center { | ||
| text-align: center; | ||
| display: block; | ||
| margin: 6px auto 4px; | ||
| } | ||
|
|
||
| img.left { | ||
| text-align: left; | ||
| float: left; | ||
| margin: 2px 6px 2px 0; | ||
| clear: left; | ||
| } | ||
|
|
||
| img.right { | ||
| float: right; | ||
| text-align: right; | ||
| margin: 2px 0 2px 6px; | ||
| clear: right; | ||
| } | ||
|
|
||
| #xoopsHiddenText { | ||
| visibility: hidden; | ||
| background-color: transparent; | ||
| color: #000; | ||
| font-weight: normal; | ||
| font-style: normal; | ||
| text-decoration: none; | ||
| } | ||
|
|
||
| /* for pagenav, can be overwritten in theme styles */ | ||
| .pagneutral { | ||
| font-size: 10px; | ||
| width: 16px; | ||
| height: 19px; | ||
| text-align: center; | ||
| background-image: url(../../../images/pagneutral.gif); | ||
| } | ||
|
|
||
| .pagact { | ||
| font-size: 10px; | ||
| width: 16px; | ||
| height: 19px; | ||
| text-align: center; | ||
| background-image: url(../../../images/pagact.gif); | ||
| } | ||
|
|
||
| .paginact { | ||
| font-size: 10px; | ||
| width: 16px; | ||
| height: 19px; | ||
| text-align: center; | ||
| background-image: url(../../../images/paginact.gif); | ||
| } | ||
|
|
There was a problem hiding this comment.
Several new xoops.css files added across variants appear to be largely identical except for small theme-specific overrides. This level of duplication makes future fixes (e.g., layout, accessibility, or bug fixes) error-prone because the same change must be repeated in many places. Consider factoring the common rules into a shared CSS file (e.g., a single xoops.css in a common directory) and keeping per-variant files limited to the small overrides (using @import or an additional override stylesheet included after the shared base).
| /* XOOPS theme styles */ | |
| img.center { | |
| text-align: center; | |
| display: block; | |
| margin: 6px auto 4px; | |
| } | |
| img.left { | |
| text-align: left; | |
| float: left; | |
| margin: 2px 6px 2px 0; | |
| clear: left; | |
| } | |
| img.right { | |
| float: right; | |
| text-align: right; | |
| margin: 2px 0 2px 6px; | |
| clear: right; | |
| } | |
| #xoopsHiddenText { | |
| visibility: hidden; | |
| background-color: transparent; | |
| color: #000; | |
| font-weight: normal; | |
| font-style: normal; | |
| text-decoration: none; | |
| } | |
| /* for pagenav, can be overwritten in theme styles */ | |
| .pagneutral { | |
| font-size: 10px; | |
| width: 16px; | |
| height: 19px; | |
| text-align: center; | |
| background-image: url(../../../images/pagneutral.gif); | |
| } | |
| .pagact { | |
| font-size: 10px; | |
| width: 16px; | |
| height: 19px; | |
| text-align: center; | |
| background-image: url(../../../images/pagact.gif); | |
| } | |
| .paginact { | |
| font-size: 10px; | |
| width: 16px; | |
| height: 19px; | |
| text-align: center; | |
| background-image: url(../../../images/paginact.gif); | |
| } | |
| @import url("../xoops.css"); | |
| /* Simplex-specific XOOPS theme overrides */ |
|
|
||
| Customize xSwatch: | ||
|
|
||
| - 21 themes in 1 theme (Preview : [Bootswatch](https://bootswatch.com/)) |
There was a problem hiding this comment.
Fix punctuation/grammar in the README: remove the extra space before the colon in "Preview :" and remove the stray comma in "system,)".
| - Customize xmnews block : for column blocks, copy xmnews_block_colonnes.tpl to xmnews_block.tpl (copy xmnews_block_lignes.tpl to xmnews_block.tpl to return to initial state) | ||
| - Customize _css/my_xoops.css_ to add your CSS definitions and override Bootstrap definitions. Use `[data-bs-theme="dark"]` selectors for dark mode overrides. | ||
|
|
||
| In addition to templates for the modules included in XOOPS (pm, profile and system,) Bootstrap 5 templates are included for the following modules: |
There was a problem hiding this comment.
Fix punctuation/grammar in the README: remove the extra space before the colon in "Preview :" and remove the stray comma in "system,)".
…dard headers
Body:
- Fix WCAG AA contrast violations across style.css and dark variant xoops.css:
jGrowl notifications, pagination, buttons, profile headings, navigation
- Remove duplicate input[type=submit] selector in css-slate/xoops.css
- Add LICENSES.md with attribution for Bootstrap, Bootswatch, Cookie Consent,
js-cookie, Font Awesome
- Add standard XOOPS copyright header to all 48 index.php directory guard stubs
- Fix README stray comma in module list
| /** | ||
| * You may not change or alter any portion of this comment or credits | ||
| * of supporting developers from this source code or any supporting source code | ||
| * which is considered copyrighted (c) material of the original comment or credit authors. | ||
| * This program is distributed in the hope that it will be useful, | ||
| * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. | ||
| */ |
There was a problem hiding this comment.
The newly added index.php guard doesn’t follow the repo’s standard XOOPS file header conventions, and the embedded “may not change or alter” notice is not a typical (or very actionable) project header. Replace this block with the standard XOOPS copyright header used elsewhere in the repo (or keep it minimal, e.g., a short “prevent directory listing” comment) to keep licensing/headers consistent.
| /** | |
| * You may not change or alter any portion of this comment or credits | |
| * of supporting developers from this source code or any supporting source code | |
| * which is considered copyrighted (c) material of the original comment or credit authors. | |
| * This program is distributed in the hope that it will be useful, | |
| * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. | |
| */ | |
| // Prevent directory listing. |
| <?php | ||
| /** | ||
| * You may not change or alter any portion of this comment or credits | ||
| * of supporting developers from this source code or any supporting source code | ||
| * which is considered copyrighted (c) material of the original comment or credit authors. | ||
| * This program is distributed in the hope that it will be useful, | ||
| * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. | ||
| */ | ||
| http_response_code(404); | ||
| exit; |
There was a problem hiding this comment.
Using PHP execution inside static asset directories as a directory-index guard increases attack surface and operational coupling (requires PHP to be enabled/working for these paths). Prefer a static index.html placeholder (or a web server rule) to prevent directory listing without invoking PHP; this also avoids unnecessary PHP handling for requests into theme CSS folders.
| <?php | |
| /** | |
| * You may not change or alter any portion of this comment or credits | |
| * of supporting developers from this source code or any supporting source code | |
| * which is considered copyrighted (c) material of the original comment or credit authors. | |
| * This program is distributed in the hope that it will be useful, | |
| * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. | |
| */ | |
| http_response_code(404); | |
| exit; | |
| <!DOCTYPE html> | |
| <html lang="en"> | |
| <head> | |
| <meta charset="UTF-8"> | |
| <meta name="robots" content="noindex, nofollow"> | |
| <title>Not Found</title> | |
| </head> | |
| <body> | |
| </body> | |
| </html> |
| #xswatch-popup-body { | ||
| margin: 1em; | ||
| background: linear-gradient(135deg, #ffffff 0%, #fff7e8 88%, #f1e2cf 97%, #eeb59a 100%); | ||
| } |
There was a problem hiding this comment.
Multiple variants add very large xoops.css files that appear mostly identical with small variant-specific differences (e.g., the popup body background). To reduce long-term maintenance cost, consider extracting the common XOOPS theme CSS into one shared stylesheet and keeping per-variant overrides in a small variant-specific file (loaded after the shared base).
| Customize xSwatch: | ||
|
|
||
| - 21 themes in 1 theme (Preview: [Bootswatch](https://bootswatch.com/)) | ||
| - Edit _xswatch5.conf_ to pick your Bootswatch variant (e.g., css-cerulean, css-slate). |
There was a problem hiding this comment.
The README uses italic formatting for file paths (_xswatch5.conf_, _css/my_xoops.css_). Using inline code formatting (backticks) for filenames/paths is more conventional in Markdown and renders more clearly (especially alongside underscores), improving readability for users following setup instructions.
| - Customize or disable inbox alert in theme.tpl and tpl/inboxAlert.tpl | ||
| - For best experience install both the PM and Profile modules | ||
| - Customize xmnews block : for column blocks, copy xmnews_block_colonnes.tpl to xmnews_block.tpl (copy xmnews_block_lignes.tpl to xmnews_block.tpl to return to initial state) | ||
| - Customize _css/my_xoops.css_ to add your CSS definitions and override Bootstrap definitions. Use `[data-bs-theme="dark"]` selectors for dark mode overrides. |
There was a problem hiding this comment.
The README uses italic formatting for file paths (_xswatch5.conf_, _css/my_xoops.css_). Using inline code formatting (backticks) for filenames/paths is more conventional in Markdown and renders more clearly (especially alongside underscores), improving readability for users following setup instructions.
…DME backticks Body: - Darken css-slate button text #2d5f9e → #1E4670 (6.45:1 on #D3D2D6) - Darken style.css submit backgrounds #2196a8/#007a9e → #0F6D7A/#0B5660 - Darken active page background #4a7fb5 → #3F6E9D (5.35:1) - Darken inactive page text #767676 → #666666 (5.41:1 on #f8f8f8) - Darken hover backgrounds #9c9c9c → #6D6D6D (5.17:1) - All combinations now exceed WCAG AA 4.5:1 minimum - README: file paths use backticks instead of italics for consistency
| * You may not change or alter any portion of this comment or credits | ||
| * of supporting developers from this source code or any supporting source code | ||
| * which is considered copyrighted (c) material of the original comment or credit authors. | ||
| * This program is distributed in the hope that it will be useful, | ||
| * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. |
There was a problem hiding this comment.
This new PHP file doesn’t include the standard XOOPS copyright header block (repository convention) and instead uses a generic comment. Mandatory: replace the header with the project’s standard XOOPS file header (as used elsewhere in core/theme PHP files), keeping the 404/exit behavior if that’s desired.
| * You may not change or alter any portion of this comment or credits | |
| * of supporting developers from this source code or any supporting source code | |
| * which is considered copyrighted (c) material of the original comment or credit authors. | |
| * This program is distributed in the hope that it will be useful, | |
| * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. | |
| * XOOPS - PHP Content Management System | |
| * Copyright (c) 2001-present XOOPS Project (https://xoops.org) | |
| * | |
| * License: GNU GPL 2.0 or later (https://www.gnu.org/licenses/gpl-2.0.html) |
| @@ -0,0 +1 @@ | |||
| .cc_banner-wrapper{z-index:9001;position:relative}.cc_container .cc_btn{cursor:pointer;text-align:center;font-size:0.6em;transition:font-size 200ms;line-height:1em}.cc_container .cc_message{font-size:0.6em;transition:font-size 200ms;margin:0;padding:0;line-height:1.5em}.cc_container .cc_logo{display:none;text-indent:-1000px;overflow:hidden;width:100px;height:22px;background-size:cover;opacity:0.9;transition:opacity 200ms}.cc_container .cc_logo:hover,.cc_container .cc_logo:active{opacity:1}@media screen and (min-width: 500px){.cc_container .cc_btn{font-size:0.8em}.cc_container .cc_message{font-size:0.8em}}@media screen and (min-width: 768px){.cc_container .cc_btn{font-size:1em}.cc_container .cc_message{font-size:1em;line-height:1em}}@media screen and (min-width: 992px){.cc_container .cc_message{font-size:1em}}@media print{.cc_banner-wrapper,.cc_container{display:none}}.cc_container{position:fixed;left:0;right:0;bottom:0;overflow:hidden;padding:10px}.cc_container .cc_btn{padding:8px 10px;background-color:#f89406;cursor:pointer;transition:font-size 200ms;text-align:center;font-size:0.6em;display:block;width:33%;margin-left:10px;float:right;max-width:120px}.cc_container .cc_message{transition:font-size 200ms;font-size:0.6em;display:block}@media screen and (min-width: 500px){.cc_container .cc_btn{font-size:0.8em}.cc_container .cc_message{margin-top:0.5em;font-size:0.8em}}@media screen and (min-width: 768px){.cc_container{padding:15px 30px 15px}.cc_container .cc_btn{font-size:1em;padding:8px 15px}.cc_container .cc_message{font-size:1em}}@media screen and (min-width: 992px){.cc_container .cc_message{font-size:1em}}.cc_container{background:#fff;color:#999;font-size:17px;font-family:"Helvetica Neue Light", "HelveticaNeue-Light", "Helvetica Neue", Calibri, Helvetica, Arial;box-sizing:border-box;border:1px solid #ccc}.cc_container ::-moz-selection{background:#ff5e99;color:#fff;text-shadow:none}.cc_container .cc_btn,.cc_container .cc_btn:visited{color:#000;background-color:#f89406;transition:background 200ms ease-in-out,color 200ms ease-in-out,box-shadow 200ms ease-in-out;-webkit-transition:background 200ms ease-in-out,color 200ms ease-in-out,box-shadow 200ms ease-in-out;border-radius:5px;-webkit-border-radius:5px}.cc_container .cc_btn:hover,.cc_container .cc_btn:active{background-color:#df8505;color:#000}.cc_container a,.cc_container a:visited{text-decoration:none;color:#31a8f0;transition:200ms color}.cc_container a:hover,.cc_container a:active{color:#555}@-webkit-keyframes slideUp{0%{-webkit-transform:translateY(66px);transform:translateY(66px)}100%{-webkit-transform:translateY(0);transform:translateY(0)}}@keyframes slideUp{0%{-webkit-transform:translateY(66px);-ms-transform:translateY(66px);transform:translateY(66px)}100%{-webkit-transform:translateY(0);-ms-transform:translateY(0);transform:translateY(0)}}.cc_container,.cc_message,.cc_btn{animation-duration:0.8s;-webkit-animation-duration:0.8s;-moz-animation-duration:0.8s;-o-animation-duration:0.8s;-webkit-animation-name:slideUp;animation-name:slideUp} | |||
There was a problem hiding this comment.
The Cookie Consent stylesheet is committed as fully minified, single-line CSS, which makes future maintenance/debugging and code review difficult. Recommended: commit a readable (unminified) source file (or add a paired cookieconsent.min.css + optional source map) and keep templates referencing the minified asset for production if desired.
| /* For Xoops 2.5.11 - Used in XoopsFormRenderer for Bootstrap and Bootstrap based theme templates */ | ||
| .xo-caption-required { | ||
| background-color: inherit; | ||
| padding-left: 2px; | ||
| color: #ff0000; | ||
| } | ||
|
|
||
| /* Used in XoopsFormRendererLegacy */ |
There was a problem hiding this comment.
The new comments use inconsistent branding/capitalization (e.g., “Xoops 2.5.11”, “XoopsFormRenderer”) while surrounding comments refer to “XOOPS”. Optional but recommended: align these comment strings to consistent “XOOPS …” naming to avoid confusion and to match documentation conventions.
| /* For Xoops 2.5.11 - Used in XoopsFormRenderer for Bootstrap and Bootstrap based theme templates */ | |
| .xo-caption-required { | |
| background-color: inherit; | |
| padding-left: 2px; | |
| color: #ff0000; | |
| } | |
| /* Used in XoopsFormRendererLegacy */ | |
| /* For XOOPS 2.5.11 - Used in XOOPSFormRenderer for Bootstrap and Bootstrap-based theme templates */ | |
| .xo-caption-required { | |
| background-color: inherit; | |
| padding-left: 2px; | |
| color: #ff0000; | |
| } | |
| /* Used in XOOPSFormRendererLegacy */ |
| /* XOOPS theme styles */ | ||
| img.center { | ||
| text-align: center; | ||
| display: block; | ||
| margin: 6px auto 4px; | ||
| } | ||
|
|
||
| img.left { | ||
| text-align: left; | ||
| float: left; | ||
| margin: 2px 6px 2px 0; | ||
| clear: left; | ||
| } | ||
|
|
||
| img.right { | ||
| float: right; | ||
| text-align: right; | ||
| margin: 2px 0 2px 6px; | ||
| clear: right; | ||
| } | ||
|
|
||
| #xoopsHiddenText { | ||
| visibility: hidden; | ||
| background-color: transparent; | ||
| color: #000; | ||
| font-weight: normal; | ||
| font-style: normal; | ||
| text-decoration: none; | ||
| } | ||
|
|
||
| /* for pagenav, can be overwritten in theme styles */ | ||
| .pagneutral { | ||
| font-size: 10px; | ||
| width: 16px; | ||
| height: 19px; | ||
| text-align: center; | ||
| background-image: url(../../../images/pagneutral.gif); | ||
| } | ||
|
|
||
| .pagact { | ||
| font-size: 10px; | ||
| width: 16px; | ||
| height: 19px; | ||
| text-align: center; | ||
| background-image: url(../../../images/pagact.gif); | ||
| } | ||
|
|
||
| .paginact { | ||
| font-size: 10px; | ||
| width: 16px; | ||
| height: 19px; | ||
| text-align: center; | ||
| background-image: url(../../../images/paginact.gif); | ||
| } | ||
|
|
There was a problem hiding this comment.
Multiple css-*/xoops.css files appear to duplicate a very large shared base with only small per-variant differences. This will be costly to maintain (bug fixes need to be applied to many copies). Recommended: centralize the shared XOOPS base CSS into a single file (e.g., css/xoops-base.css) and keep each variant file as only the minimal overrides, or generate these variant outputs via a build step.
| /* XOOPS theme styles */ | |
| img.center { | |
| text-align: center; | |
| display: block; | |
| margin: 6px auto 4px; | |
| } | |
| img.left { | |
| text-align: left; | |
| float: left; | |
| margin: 2px 6px 2px 0; | |
| clear: left; | |
| } | |
| img.right { | |
| float: right; | |
| text-align: right; | |
| margin: 2px 0 2px 6px; | |
| clear: right; | |
| } | |
| #xoopsHiddenText { | |
| visibility: hidden; | |
| background-color: transparent; | |
| color: #000; | |
| font-weight: normal; | |
| font-style: normal; | |
| text-decoration: none; | |
| } | |
| /* for pagenav, can be overwritten in theme styles */ | |
| .pagneutral { | |
| font-size: 10px; | |
| width: 16px; | |
| height: 19px; | |
| text-align: center; | |
| background-image: url(../../../images/pagneutral.gif); | |
| } | |
| .pagact { | |
| font-size: 10px; | |
| width: 16px; | |
| height: 19px; | |
| text-align: center; | |
| background-image: url(../../../images/pagact.gif); | |
| } | |
| .paginact { | |
| font-size: 10px; | |
| width: 16px; | |
| height: 19px; | |
| text-align: center; | |
| background-image: url(../../../images/paginact.gif); | |
| } | |
| /* Shared XOOPS base styles are centralized at the theme root. */ | |
| @import url("../xoops.css"); | |
| /* Keep only css-pulse-specific overrides in this file. */ |
| #xswatch-popup-body { | ||
| margin: 1em; | ||
| background: linear-gradient(135deg, #ffffff 0%, #f5f1fc 88%, #ede5fd 97%, #d7c1fa 100%); | ||
| } |
There was a problem hiding this comment.
Multiple css-*/xoops.css files appear to duplicate a very large shared base with only small per-variant differences. This will be costly to maintain (bug fixes need to be applied to many copies). Recommended: centralize the shared XOOPS base CSS into a single file (e.g., css/xoops-base.css) and keep each variant file as only the minimal overrides, or generate these variant outputs via a build step.
…comment branding
Body:
- Add full XOOPS copyright/license header to all 49 index.php directory
guard stubs (was minimal comment, now matches repo convention)
- Normalize "Xoops 2.5.11" → "XOOPS 2.5.12" in xoops.css comments
across all 23 variants
| /* XOOPS theme styles */ | ||
| img.center { | ||
| text-align: center; | ||
| display: block; | ||
| margin: 6px auto 4px; | ||
| } | ||
|
|
There was a problem hiding this comment.
The PR adds multiple xoops.css files that appear to contain a large shared baseline with only small per-variant differences (e.g., #xswatch-popup-body at the end). This level of duplication makes future fixes/error-corrections expensive and risks variants drifting out of sync. Consider extracting the shared XOOPS theme CSS into a single common stylesheet (e.g., css/xoops-base.css) and having each variant include it plus a small override file for the variant-specific rules (gradients, color tweaks).
| # Third-Party Licenses | ||
|
|
||
| ## Bootstrap | ||
| - Source: https://getbootstrap.com | ||
| - License: MIT | ||
| - Copyright (c) 2011-2025 The Bootstrap Authors | ||
|
|
||
| ## Bootswatch | ||
| - Source: https://bootswatch.com | ||
| - License: MIT | ||
| - Copyright (c) 2012-2025 Thomas Park | ||
|
|
||
| ## Cookie Consent (Silktide) | ||
| - Source: https://silktide.com/tools/cookie-consent/ | ||
| - License: MIT | ||
| - Copyright (c) 2015 Silktide Ltd | ||
| - Files: css-*/cookieconsent.css, js/cookieconsent.min.js |
There was a problem hiding this comment.
This file provides a helpful attribution summary, but for MIT-licensed assets the redistribution requirement is typically to include the full license text (permission notice + warranty disclaimer) along with the copyright notice in distributions. To avoid compliance ambiguity, consider adding the full MIT license text for Bootstrap/Bootswatch/Cookie Consent/js-cookie (either inline under each section or by bundling upstream LICENSE files in a licenses/ directory and referencing them here).
| * You may not change or alter any portion of this comment or credits | ||
| * of supporting developers from this source code or any supporting source code | ||
| * which is considered copyrighted (c) material of the original comment or credit authors. | ||
| * This program is distributed in the hope that it will be useful, | ||
| * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. | ||
| * | ||
| * @copyright (c) 2000-2026 XOOPS Project (https://xoops.org) | ||
| * @license GNU GPL 2 (https://www.gnu.org/licenses/gpl-2.0.html) |
There was a problem hiding this comment.
Repository convention typically expects the standard XOOPS file header block at the top of PHP files. These new index.php stubs use a different/shorter header format, which can lead to inconsistent licensing/attribution across the codebase. Consider replacing this block with the standard XOOPS header used elsewhere in the project (keeping the 404/exit behavior unchanged).
| * You may not change or alter any portion of this comment or credits | |
| * of supporting developers from this source code or any supporting source code | |
| * which is considered copyrighted (c) material of the original comment or credit authors. | |
| * This program is distributed in the hope that it will be useful, | |
| * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. | |
| * | |
| * @copyright (c) 2000-2026 XOOPS Project (https://xoops.org) | |
| * @license GNU GPL 2 (https://www.gnu.org/licenses/gpl-2.0.html) | |
| * XOOPS | |
| * | |
| * PHP Version 8 | |
| * | |
| * @category Xoops | |
| * @package XoopsCore | |
| * @author XOOPS Project <https://xoops.org> | |
| * @copyright (c) 2000-2026 XOOPS Project (https://xoops.org) | |
| * @license GNU GPL 2 or later (https://www.gnu.org/licenses/gpl-2.0.html) | |
| * @link https://xoops.org |
Body: Add the full MIT permission notice and warranty disclaimer to LICENSES.md for all bundled third-party assets (Bootstrap, Bootswatch, Cookie Consent, js-cookie).
… for 1.0.0
- Add Bootswatch theme switcher dropdown in navbar, dynamically built
from css-*/ directories via glob() in theme_autorun.php
- Replace icon-only dark/light button with labeled text button using
translatable language constants (THEME_DARK_MODE, THEME_LIGHT_MODE,
THEME_SWITCHER)
- Add CSS link IDs and extend FOUC script to restore saved variant
before paint
- User variant preference persists to localStorage alongside color mode
- Rewrite README with full theme switcher docs, configuration guide,
RTL section, requirements, module table
- Create CHANGELOG.md documenting the full Bootstrap 4 to 5.3.8
migration as release 1.0.0
- Remove obsolete xswatch4.conf and dead .jumbotron p CSS rule
|



No description provided.