merge: Pa11y + Gitea refs migration (resolve updates.xml conflict)
Some checks failed
CodeQL Security Scanning / Analyze (javascript) (push) Failing after 1m14s
CodeQL Security Scanning / Analyze (actions) (push) Failing after 1m15s
Repo Health / Access control (push) Failing after 2s
Standards Compliance / Secret Scanning (push) Failing after 23s
Standards Compliance / License Header Validation (push) Failing after 40s
Standards Compliance / Repository Structure Validation (push) Failing after 41s
Standards Compliance / Coding Standards Check (push) Failing after 32s
Standards Compliance / Version Consistency Check (push) Failing after 25s
Standards Compliance / Workflow Configuration Check (push) Failing after 31s
Standards Compliance / Documentation Quality Check (push) Failing after 26s
Standards Compliance / README Completeness Check (push) Failing after 28s
Standards Compliance / Git Repository Hygiene (push) Failing after 40s
Standards Compliance / Script Integrity Validation (push) Failing after 37s
Standards Compliance / Line Length Check (push) Failing after 32s
Standards Compliance / File Naming Standards (push) Failing after 35s
Standards Compliance / Insecure Code Pattern Detection (push) Failing after 35s
Standards Compliance / Code Complexity Analysis (push) Failing after 30s
Standards Compliance / Code Duplication Detection (push) Failing after 35s
Standards Compliance / Dead Code Detection (push) Failing after 42s
Standards Compliance / File Size Limits (push) Failing after 31s
Standards Compliance / Binary File Detection (push) Failing after 25s
Standards Compliance / TODO/FIXME Tracking (push) Failing after 24s
Standards Compliance / Dependency Vulnerability Scanning (push) Failing after 35s
Standards Compliance / Unused Dependencies Check (push) Failing after 36s
Standards Compliance / Broken Link Detection (push) Failing after 28s
Standards Compliance / API Documentation Coverage (push) Failing after 35s
Standards Compliance / Accessibility Check (push) Failing after 30s
Standards Compliance / Performance Metrics (push) Failing after 35s
Standards Compliance / Enterprise Readiness Check (push) Failing after 33s
Standards Compliance / Repository Health Check (push) Failing after 30s
CodeQL Security Scanning / Security Scan Summary (push) Successful in 0s
Repo Health / Release configuration (push) Has been skipped
Repo Health / Scripts governance (push) Has been skipped
Repo Health / Repository health (push) Has been skipped
Standards Compliance / Terraform Configuration Validation (push) Failing after 38s
Standards Compliance / Compliance Summary (push) Failing after 1s
Repository Cleanup / Repository Maintenance (push) Failing after 27s
Auto-Assign Issues & PRs / Assign unassigned issues and PRs (push) Successful in 1s
Some checks failed
CodeQL Security Scanning / Analyze (javascript) (push) Failing after 1m14s
CodeQL Security Scanning / Analyze (actions) (push) Failing after 1m15s
Repo Health / Access control (push) Failing after 2s
Standards Compliance / Secret Scanning (push) Failing after 23s
Standards Compliance / License Header Validation (push) Failing after 40s
Standards Compliance / Repository Structure Validation (push) Failing after 41s
Standards Compliance / Coding Standards Check (push) Failing after 32s
Standards Compliance / Version Consistency Check (push) Failing after 25s
Standards Compliance / Workflow Configuration Check (push) Failing after 31s
Standards Compliance / Documentation Quality Check (push) Failing after 26s
Standards Compliance / README Completeness Check (push) Failing after 28s
Standards Compliance / Git Repository Hygiene (push) Failing after 40s
Standards Compliance / Script Integrity Validation (push) Failing after 37s
Standards Compliance / Line Length Check (push) Failing after 32s
Standards Compliance / File Naming Standards (push) Failing after 35s
Standards Compliance / Insecure Code Pattern Detection (push) Failing after 35s
Standards Compliance / Code Complexity Analysis (push) Failing after 30s
Standards Compliance / Code Duplication Detection (push) Failing after 35s
Standards Compliance / Dead Code Detection (push) Failing after 42s
Standards Compliance / File Size Limits (push) Failing after 31s
Standards Compliance / Binary File Detection (push) Failing after 25s
Standards Compliance / TODO/FIXME Tracking (push) Failing after 24s
Standards Compliance / Dependency Vulnerability Scanning (push) Failing after 35s
Standards Compliance / Unused Dependencies Check (push) Failing after 36s
Standards Compliance / Broken Link Detection (push) Failing after 28s
Standards Compliance / API Documentation Coverage (push) Failing after 35s
Standards Compliance / Accessibility Check (push) Failing after 30s
Standards Compliance / Performance Metrics (push) Failing after 35s
Standards Compliance / Enterprise Readiness Check (push) Failing after 33s
Standards Compliance / Repository Health Check (push) Failing after 30s
CodeQL Security Scanning / Security Scan Summary (push) Successful in 0s
Repo Health / Release configuration (push) Has been skipped
Repo Health / Scripts governance (push) Has been skipped
Repo Health / Repository health (push) Has been skipped
Standards Compliance / Terraform Configuration Validation (push) Failing after 38s
Standards Compliance / Compliance Summary (push) Failing after 1s
Repository Cleanup / Repository Maintenance (push) Failing after 27s
Auto-Assign Issues & PRs / Assign unassigned issues and PRs (push) Successful in 1s
This commit is contained in:
32
.github/CLAUDE.md
vendored
32
.github/CLAUDE.md
vendored
@@ -8,12 +8,12 @@ SPDX-License-Identifier: GPL-3.0-or-later
|
||||
# FILE INFORMATION
|
||||
DEFGROUP: MokoStandards.Templates.GitHub
|
||||
INGROUP: MokoStandards.Templates
|
||||
REPO: https://github.com/mokoconsulting-tech/MokoStandards
|
||||
REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoStandards
|
||||
PATH: /templates/github/copilot-instructions.joomla.md.template
|
||||
VERSION: XX.YY.ZZ
|
||||
BRIEF: GitHub Copilot custom instructions template for Joomla/MokoWaaS governed repositories
|
||||
NOTE: Synced to .github/copilot-instructions.md in all Joomla/WaaS repos via bulk sync.
|
||||
Tokens replaced at sync time: MokoCassiopeia, https://github.com/mokoconsulting-tech/MokoCassiopeia, {{EXTENSION_NAME}},
|
||||
Tokens replaced at sync time: MokoCassiopeia, https://git.mokoconsulting.tech/MokoConsulting/MokoCassiopeia, {{EXTENSION_NAME}},
|
||||
{{EXTENSION_TYPE}}, {{EXTENSION_ELEMENT}}
|
||||
-->
|
||||
|
||||
@@ -37,7 +37,7 @@ NOTE: Synced to .github/copilot-instructions.md in all Joomla/WaaS repos via bul
|
||||
> | Placeholder | Where to find the value |
|
||||
> |---|---|
|
||||
> | `MokoCassiopeia` | The GitHub repository name (visible in the URL, `README.md` heading, or `git remote -v`) |
|
||||
> | `https://github.com/mokoconsulting-tech/MokoCassiopeia` | Full GitHub URL, e.g. `https://github.com/mokoconsulting-tech/<repo-name>` |
|
||||
> | `https://git.mokoconsulting.tech/MokoConsulting/MokoCassiopeia` | Full GitHub URL, e.g. `https://git.mokoconsulting.tech/MokoConsulting/<repo-name>` |
|
||||
> | `{{EXTENSION_NAME}}` | The `<name>` element in `manifest.xml` at the repository root |
|
||||
> | `{{EXTENSION_TYPE}}` | The `type` attribute of the `<extension>` tag in `manifest.xml` (`component`, `module`, `plugin`, or `template`) |
|
||||
> | `{{EXTENSION_ELEMENT}}` | The `<element>` tag in `manifest.xml`, or the filename prefix (e.g. `com_myextension`, `mod_mymodule`) |
|
||||
@@ -48,9 +48,9 @@ NOTE: Synced to .github/copilot-instructions.md in all Joomla/WaaS repos via bul
|
||||
|
||||
## What This Repo Is
|
||||
|
||||
This is a **Moko Consulting MokoWaaS** (Joomla) repository governed by [MokoStandards](https://github.com/mokoconsulting-tech/MokoStandards). All coding standards, workflows, and policies are defined there and enforced here via bulk sync.
|
||||
This is a **Moko Consulting MokoWaaS** (Joomla) repository governed by [MokoStandards](https://git.mokoconsulting.tech/MokoConsulting/MokoStandards). All coding standards, workflows, and policies are defined there and enforced here via bulk sync.
|
||||
|
||||
Repository URL: https://github.com/mokoconsulting-tech/MokoCassiopeia
|
||||
Repository URL: https://git.mokoconsulting.tech/MokoConsulting/MokoCassiopeia
|
||||
Extension name: **{{EXTENSION_NAME}}**
|
||||
Extension type: **{{EXTENSION_TYPE}}** (`{{EXTENSION_ELEMENT}}`)
|
||||
Platform: **Joomla 4.x / MokoWaaS**
|
||||
@@ -79,7 +79,7 @@ Every new file needs a copyright header as its first content.
|
||||
* FILE INFORMATION
|
||||
* DEFGROUP: MokoCassiopeia.{{EXTENSION_TYPE}}
|
||||
* INGROUP: MokoCassiopeia
|
||||
* REPO: https://github.com/mokoconsulting-tech/MokoCassiopeia
|
||||
* REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoCassiopeia
|
||||
* PATH: /path/to/file.php
|
||||
* VERSION: XX.YY.ZZ
|
||||
* BRIEF: One-line description of purpose
|
||||
@@ -100,7 +100,7 @@ SPDX-License-Identifier: GPL-3.0-or-later
|
||||
# FILE INFORMATION
|
||||
DEFGROUP: MokoCassiopeia.Documentation
|
||||
INGROUP: MokoCassiopeia
|
||||
REPO: https://github.com/mokoconsulting-tech/MokoCassiopeia
|
||||
REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoCassiopeia
|
||||
PATH: /docs/file.md
|
||||
VERSION: XX.YY.ZZ
|
||||
BRIEF: One-line description
|
||||
@@ -138,7 +138,7 @@ The version in `README.md` **must always match** the `<version>` tag in `manifes
|
||||
<version>01.02.04</version>
|
||||
<downloads>
|
||||
<downloadurl type="full" format="zip">
|
||||
https://github.com/mokoconsulting-tech/MokoCassiopeia/releases/download/01.02.04/{{EXTENSION_ELEMENT}}-01.02.04.zip
|
||||
https://git.mokoconsulting.tech/MokoConsulting/MokoCassiopeia/releases/download/01.02.04/{{EXTENSION_ELEMENT}}-01.02.04.zip
|
||||
</downloadurl>
|
||||
</downloads>
|
||||
<targetplatform name="joomla" version="4\.[0-9]+" />
|
||||
@@ -191,7 +191,7 @@ The `manifest.xml` must reference it via:
|
||||
```xml
|
||||
<updateservers>
|
||||
<server type="extension" priority="1" name="{{EXTENSION_NAME}}">
|
||||
https://github.com/mokoconsulting-tech/MokoCassiopeia/raw/main/updates.xml
|
||||
https://git.mokoconsulting.tech/MokoConsulting/MokoCassiopeia/raw/main/updates.xml
|
||||
</server>
|
||||
</updateservers>
|
||||
```
|
||||
@@ -238,16 +238,16 @@ token: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
## MokoStandards Reference
|
||||
|
||||
This repository is governed by [MokoStandards](https://github.com/mokoconsulting-tech/MokoStandards). Authoritative policies:
|
||||
This repository is governed by [MokoStandards](https://git.mokoconsulting.tech/MokoConsulting/MokoStandards). Authoritative policies:
|
||||
|
||||
| Document | Purpose |
|
||||
|----------|---------|
|
||||
| [file-header-standards.md](https://github.com/mokoconsulting-tech/MokoStandards/blob/main/docs/policy/file-header-standards.md) | Copyright-header rules for every file type |
|
||||
| [coding-style-guide.md](https://github.com/mokoconsulting-tech/MokoStandards/blob/main/docs/policy/coding-style-guide.md) | Naming and formatting conventions |
|
||||
| [branching-strategy.md](https://github.com/mokoconsulting-tech/MokoStandards/blob/main/docs/policy/branching-strategy.md) | Branch naming, hierarchy, and release workflow |
|
||||
| [merge-strategy.md](https://github.com/mokoconsulting-tech/MokoStandards/blob/main/docs/policy/merge-strategy.md) | Squash-merge policy and PR title/body conventions |
|
||||
| [changelog-standards.md](https://github.com/mokoconsulting-tech/MokoStandards/blob/main/docs/policy/changelog-standards.md) | How and when to update CHANGELOG.md |
|
||||
| [joomla-development-guide.md](https://github.com/mokoconsulting-tech/MokoStandards/blob/main/docs/guide/waas/joomla-development-guide.md) | MokoWaaS Joomla extension development guide |
|
||||
| [file-header-standards.md](https://git.mokoconsulting.tech/MokoConsulting/MokoStandards/blob/main/docs/policy/file-header-standards.md) | Copyright-header rules for every file type |
|
||||
| [coding-style-guide.md](https://git.mokoconsulting.tech/MokoConsulting/MokoStandards/blob/main/docs/policy/coding-style-guide.md) | Naming and formatting conventions |
|
||||
| [branching-strategy.md](https://git.mokoconsulting.tech/MokoConsulting/MokoStandards/blob/main/docs/policy/branching-strategy.md) | Branch naming, hierarchy, and release workflow |
|
||||
| [merge-strategy.md](https://git.mokoconsulting.tech/MokoConsulting/MokoStandards/blob/main/docs/policy/merge-strategy.md) | Squash-merge policy and PR title/body conventions |
|
||||
| [changelog-standards.md](https://git.mokoconsulting.tech/MokoConsulting/MokoStandards/blob/main/docs/policy/changelog-standards.md) | How and when to update CHANGELOG.md |
|
||||
| [joomla-development-guide.md](https://git.mokoconsulting.tech/MokoConsulting/MokoStandards/blob/main/docs/guide/waas/joomla-development-guide.md) | MokoWaaS Joomla extension development guide |
|
||||
|
||||
---
|
||||
|
||||
|
||||
4
.github/ISSUE_TEMPLATE/config.yml
vendored
4
.github/ISSUE_TEMPLATE/config.yml
vendored
@@ -8,10 +8,10 @@ contact_links:
|
||||
url: https://mokoconsulting.tech/
|
||||
about: Get help or ask questions through our website
|
||||
- name: 📚 MokoStandards Documentation
|
||||
url: https://github.com/mokoconsulting-tech/MokoStandards
|
||||
url: https://git.mokoconsulting.tech/MokoConsulting/MokoStandards
|
||||
about: View our coding standards and best practices
|
||||
- name: 🔒 Report a Security Vulnerability
|
||||
url: https://github.com/mokoconsulting-tech/.github-private/security/advisories/new
|
||||
url: https://git.mokoconsulting.tech/MokoConsulting/.github-private/security/advisories/new
|
||||
about: Report security vulnerabilities privately (for critical issues)
|
||||
- name: 💡 Community Discussions
|
||||
url: https://github.com/orgs/mokoconsulting-tech/discussions
|
||||
|
||||
2
.github/ISSUE_TEMPLATE/feature_request.md
vendored
2
.github/ISSUE_TEMPLATE/feature_request.md
vendored
@@ -37,7 +37,7 @@ If you have ideas about how this could be implemented, share them here:
|
||||
Add any other context, mockups, or screenshots about the feature request here.
|
||||
|
||||
## Relevant Standards
|
||||
Does this relate to any standards in [MokoStandards](https://github.com/mokoconsulting-tech/MokoStandards)?
|
||||
Does this relate to any standards in [MokoStandards](https://git.mokoconsulting.tech/MokoConsulting/MokoStandards)?
|
||||
- [ ] Accessibility (WCAG 2.1 AA)
|
||||
- [ ] Localization (en_US/en_GB)
|
||||
- [ ] Security best practices
|
||||
|
||||
2
.github/ISSUE_TEMPLATE/security.md
vendored
2
.github/ISSUE_TEMPLATE/security.md
vendored
@@ -35,7 +35,7 @@ Use this template only for:
|
||||
<!-- Describe how this could be addressed -->
|
||||
|
||||
## Standards Reference
|
||||
Does this relate to security standards in [MokoStandards](https://github.com/mokoconsulting-tech/MokoStandards)?
|
||||
Does this relate to security standards in [MokoStandards](https://git.mokoconsulting.tech/MokoConsulting/MokoStandards)?
|
||||
- [ ] SPDX license identifiers
|
||||
- [ ] Secret management
|
||||
- [ ] Dependency security
|
||||
|
||||
32
.github/copilot-instructions.md
vendored
32
.github/copilot-instructions.md
vendored
@@ -8,12 +8,12 @@ SPDX-License-Identifier: GPL-3.0-or-later
|
||||
# FILE INFORMATION
|
||||
DEFGROUP: MokoStandards.Templates.GitHub
|
||||
INGROUP: MokoStandards.Templates
|
||||
REPO: https://github.com/mokoconsulting-tech/MokoStandards
|
||||
REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoStandards
|
||||
PATH: /templates/github/copilot-instructions.joomla.md.template
|
||||
VERSION: XX.YY.ZZ
|
||||
BRIEF: GitHub Copilot custom instructions template for Joomla/MokoWaaS governed repositories
|
||||
NOTE: Synced to .github/copilot-instructions.md in all Joomla/WaaS repos via bulk sync.
|
||||
Tokens replaced at sync time: MokoCassiopeia, https://github.com/mokoconsulting-tech/MokoCassiopeia, {{EXTENSION_NAME}},
|
||||
Tokens replaced at sync time: MokoCassiopeia, https://git.mokoconsulting.tech/MokoConsulting/MokoCassiopeia, {{EXTENSION_NAME}},
|
||||
{{EXTENSION_TYPE}}, {{EXTENSION_ELEMENT}}
|
||||
-->
|
||||
|
||||
@@ -37,7 +37,7 @@ NOTE: Synced to .github/copilot-instructions.md in all Joomla/WaaS repos via bul
|
||||
> | Placeholder | Where to find the value |
|
||||
> |---|---|
|
||||
> | `MokoCassiopeia` | The GitHub repository name (visible in the URL, `README.md` heading, or `git remote -v`) |
|
||||
> | `https://github.com/mokoconsulting-tech/MokoCassiopeia` | Full GitHub URL, e.g. `https://github.com/mokoconsulting-tech/<repo-name>` |
|
||||
> | `https://git.mokoconsulting.tech/MokoConsulting/MokoCassiopeia` | Full GitHub URL, e.g. `https://git.mokoconsulting.tech/MokoConsulting/<repo-name>` |
|
||||
> | `{{EXTENSION_NAME}}` | The `<name>` element in `manifest.xml` at the repository root |
|
||||
> | `{{EXTENSION_TYPE}}` | The `type` attribute of the `<extension>` tag in `manifest.xml` (`component`, `module`, `plugin`, or `template`) |
|
||||
> | `{{EXTENSION_ELEMENT}}` | The `<element>` tag in `manifest.xml`, or the filename prefix (e.g. `com_myextension`, `mod_mymodule`) |
|
||||
@@ -48,9 +48,9 @@ NOTE: Synced to .github/copilot-instructions.md in all Joomla/WaaS repos via bul
|
||||
|
||||
## What This Repo Is
|
||||
|
||||
This is a **Moko Consulting MokoWaaS** (Joomla) repository governed by [MokoStandards](https://github.com/mokoconsulting-tech/MokoStandards). All coding standards, workflows, and policies are defined there and enforced here via bulk sync.
|
||||
This is a **Moko Consulting MokoWaaS** (Joomla) repository governed by [MokoStandards](https://git.mokoconsulting.tech/MokoConsulting/MokoStandards). All coding standards, workflows, and policies are defined there and enforced here via bulk sync.
|
||||
|
||||
Repository URL: https://github.com/mokoconsulting-tech/MokoCassiopeia
|
||||
Repository URL: https://git.mokoconsulting.tech/MokoConsulting/MokoCassiopeia
|
||||
Extension name: **{{EXTENSION_NAME}}**
|
||||
Extension type: **{{EXTENSION_TYPE}}** (`{{EXTENSION_ELEMENT}}`)
|
||||
Platform: **Joomla 4.x / MokoWaaS**
|
||||
@@ -79,7 +79,7 @@ Every new file needs a copyright header as its first content.
|
||||
* FILE INFORMATION
|
||||
* DEFGROUP: MokoCassiopeia.{{EXTENSION_TYPE}}
|
||||
* INGROUP: MokoCassiopeia
|
||||
* REPO: https://github.com/mokoconsulting-tech/MokoCassiopeia
|
||||
* REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoCassiopeia
|
||||
* PATH: /path/to/file.php
|
||||
* VERSION: XX.YY.ZZ
|
||||
* BRIEF: One-line description of purpose
|
||||
@@ -100,7 +100,7 @@ SPDX-License-Identifier: GPL-3.0-or-later
|
||||
# FILE INFORMATION
|
||||
DEFGROUP: MokoCassiopeia.Documentation
|
||||
INGROUP: MokoCassiopeia
|
||||
REPO: https://github.com/mokoconsulting-tech/MokoCassiopeia
|
||||
REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoCassiopeia
|
||||
PATH: /docs/file.md
|
||||
VERSION: XX.YY.ZZ
|
||||
BRIEF: One-line description
|
||||
@@ -138,7 +138,7 @@ The version in `README.md` **must always match** the `<version>` tag in `manifes
|
||||
<version>01.02.04</version>
|
||||
<downloads>
|
||||
<downloadurl type="full" format="zip">
|
||||
https://github.com/mokoconsulting-tech/MokoCassiopeia/releases/download/01.02.04/{{EXTENSION_ELEMENT}}-01.02.04.zip
|
||||
https://git.mokoconsulting.tech/MokoConsulting/MokoCassiopeia/releases/download/01.02.04/{{EXTENSION_ELEMENT}}-01.02.04.zip
|
||||
</downloadurl>
|
||||
</downloads>
|
||||
<targetplatform name="joomla" version="4\.[0-9]+" />
|
||||
@@ -191,7 +191,7 @@ The `manifest.xml` must reference it via:
|
||||
```xml
|
||||
<updateservers>
|
||||
<server type="extension" priority="1" name="{{EXTENSION_NAME}}">
|
||||
https://github.com/mokoconsulting-tech/MokoCassiopeia/raw/main/updates.xml
|
||||
https://git.mokoconsulting.tech/MokoConsulting/MokoCassiopeia/raw/main/updates.xml
|
||||
</server>
|
||||
</updateservers>
|
||||
```
|
||||
@@ -238,16 +238,16 @@ token: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
## MokoStandards Reference
|
||||
|
||||
This repository is governed by [MokoStandards](https://github.com/mokoconsulting-tech/MokoStandards). Authoritative policies:
|
||||
This repository is governed by [MokoStandards](https://git.mokoconsulting.tech/MokoConsulting/MokoStandards). Authoritative policies:
|
||||
|
||||
| Document | Purpose |
|
||||
|----------|---------|
|
||||
| [file-header-standards.md](https://github.com/mokoconsulting-tech/MokoStandards/blob/main/docs/policy/file-header-standards.md) | Copyright-header rules for every file type |
|
||||
| [coding-style-guide.md](https://github.com/mokoconsulting-tech/MokoStandards/blob/main/docs/policy/coding-style-guide.md) | Naming and formatting conventions |
|
||||
| [branching-strategy.md](https://github.com/mokoconsulting-tech/MokoStandards/blob/main/docs/policy/branching-strategy.md) | Branch naming, hierarchy, and release workflow |
|
||||
| [merge-strategy.md](https://github.com/mokoconsulting-tech/MokoStandards/blob/main/docs/policy/merge-strategy.md) | Squash-merge policy and PR title/body conventions |
|
||||
| [changelog-standards.md](https://github.com/mokoconsulting-tech/MokoStandards/blob/main/docs/policy/changelog-standards.md) | How and when to update CHANGELOG.md |
|
||||
| [joomla-development-guide.md](https://github.com/mokoconsulting-tech/MokoStandards/blob/main/docs/guide/waas/joomla-development-guide.md) | MokoWaaS Joomla extension development guide |
|
||||
| [file-header-standards.md](https://git.mokoconsulting.tech/MokoConsulting/MokoStandards/blob/main/docs/policy/file-header-standards.md) | Copyright-header rules for every file type |
|
||||
| [coding-style-guide.md](https://git.mokoconsulting.tech/MokoConsulting/MokoStandards/blob/main/docs/policy/coding-style-guide.md) | Naming and formatting conventions |
|
||||
| [branching-strategy.md](https://git.mokoconsulting.tech/MokoConsulting/MokoStandards/blob/main/docs/policy/branching-strategy.md) | Branch naming, hierarchy, and release workflow |
|
||||
| [merge-strategy.md](https://git.mokoconsulting.tech/MokoConsulting/MokoStandards/blob/main/docs/policy/merge-strategy.md) | Squash-merge policy and PR title/body conventions |
|
||||
| [changelog-standards.md](https://git.mokoconsulting.tech/MokoConsulting/MokoStandards/blob/main/docs/policy/changelog-standards.md) | How and when to update CHANGELOG.md |
|
||||
| [joomla-development-guide.md](https://git.mokoconsulting.tech/MokoConsulting/MokoStandards/blob/main/docs/guide/waas/joomla-development-guide.md) | MokoWaaS Joomla extension development guide |
|
||||
|
||||
---
|
||||
|
||||
|
||||
2
.github/dependabot.yml
vendored
2
.github/dependabot.yml
vendored
@@ -3,7 +3,7 @@
|
||||
# FILE INFORMATION
|
||||
# DEFGROUP: GitHub.Dependabot
|
||||
# INGROUP: MokoStandards.Security
|
||||
# REPO: https://github.com/mokoconsulting-tech/MokoStandards
|
||||
# REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoStandards
|
||||
# PATH: /.github/dependabot.yml
|
||||
# VERSION: 03.09.03
|
||||
# BRIEF: Dependabot configuration for automated dependency updates and security patches
|
||||
|
||||
2
.github/workflows/auto-assign.yml
vendored
2
.github/workflows/auto-assign.yml
vendored
@@ -4,7 +4,7 @@
|
||||
# FILE INFORMATION
|
||||
# DEFGROUP: GitHub.Workflow
|
||||
# INGROUP: MokoStandards.Workflows.Shared
|
||||
# REPO: https://github.com/mokoconsulting-tech/MokoStandards
|
||||
# REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoStandards
|
||||
# PATH: /.github/workflows/auto-assign.yml
|
||||
# VERSION: 04.06.00
|
||||
# BRIEF: Auto-assign jmiller-moko to unassigned issues and PRs every 15 minutes
|
||||
|
||||
2
.github/workflows/auto-dev-issue.yml
vendored
2
.github/workflows/auto-dev-issue.yml
vendored
@@ -7,7 +7,7 @@
|
||||
# FILE INFORMATION
|
||||
# DEFGROUP: GitHub.Workflow
|
||||
# INGROUP: MokoStandards.Automation
|
||||
# REPO: https://github.com/mokoconsulting-tech/MokoStandards
|
||||
# REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoStandards
|
||||
# PATH: /templates/workflows/shared/auto-dev-issue.yml.template
|
||||
# VERSION: 04.06.00
|
||||
# BRIEF: Auto-create tracking issue with sub-issues for dev/rc branch workflow
|
||||
|
||||
4
.github/workflows/auto-release.yml
vendored
4
.github/workflows/auto-release.yml
vendored
@@ -5,7 +5,7 @@
|
||||
# FILE INFORMATION
|
||||
# DEFGROUP: GitHub.Workflow
|
||||
# INGROUP: MokoStandards.Release
|
||||
# REPO: https://github.com/mokoconsulting-tech/MokoStandards
|
||||
# REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoStandards
|
||||
# PATH: /templates/workflows/joomla/auto-release.yml.template
|
||||
# VERSION: 04.06.00
|
||||
# BRIEF: Joomla build & release — ZIP package, updates.xml, SHA-256 checksum
|
||||
@@ -70,7 +70,7 @@ jobs:
|
||||
COMPOSER_AUTH: '{"github-oauth":{"github.com":"${{ secrets.GH_TOKEN || github.token }}"}}'
|
||||
run: |
|
||||
git clone --depth 1 --branch version/04 --quiet \
|
||||
"https://x-access-token:${GH_TOKEN}@github.com/mokoconsulting-tech/MokoStandards.git" \
|
||||
"https://x-access-token:${GH_TOKEN}@git.mokoconsulting.tech/MokoConsulting/MokoStandards.git" \
|
||||
/tmp/mokostandards
|
||||
cd /tmp/mokostandards
|
||||
composer install --no-dev --no-interaction --quiet
|
||||
|
||||
288
.github/workflows/auto-update-sha.yml
vendored
288
.github/workflows/auto-update-sha.yml
vendored
@@ -1,144 +1,144 @@
|
||||
# Copyright (C) 2026 Moko Consulting <hello@mokoconsulting.tech>
|
||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||
# FILE INFORMATION
|
||||
# DEFGROUP: GitHub.Workflow
|
||||
# INGROUP: MokoCassiopeia.Automation
|
||||
# REPO: https://github.com/mokoconsulting-tech/MokoCassiopeia
|
||||
# PATH: /.github/workflows/auto-update-sha.yml
|
||||
# VERSION: 03.09.03
|
||||
# BRIEF: Automatically update SHA-256 hash in updates.xml after release
|
||||
# NOTE: Ensures updates.xml stays synchronized with release packages
|
||||
|
||||
name: Auto-Update SHA Hash
|
||||
|
||||
on:
|
||||
release:
|
||||
types: [published]
|
||||
workflow_dispatch:
|
||||
inputs:
|
||||
tag:
|
||||
description: 'Release tag to update SHA for (e.g., 03.08.03)'
|
||||
required: true
|
||||
type: string
|
||||
|
||||
permissions:
|
||||
contents: write
|
||||
|
||||
jobs:
|
||||
update-sha:
|
||||
name: Update SHA-256 Hash in updates.xml
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- name: Checkout Repository
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 0
|
||||
ref: main
|
||||
|
||||
- name: Get release tag
|
||||
id: tag
|
||||
run: |
|
||||
if [ "${{ github.event_name }}" == "workflow_dispatch" ]; then
|
||||
TAG="${{ inputs.tag }}"
|
||||
else
|
||||
TAG="${{ github.event.release.tag_name }}"
|
||||
fi
|
||||
echo "tag=${TAG}" >> $GITHUB_OUTPUT
|
||||
echo "Processing release: ${TAG}"
|
||||
|
||||
- name: Download release package
|
||||
run: |
|
||||
TAG="${{ steps.tag.outputs.tag }}"
|
||||
PACKAGE_NAME="mokocassiopeia-src-${TAG}.zip"
|
||||
DOWNLOAD_URL="https://github.com/${{ github.repository }}/releases/download/${TAG}/${PACKAGE_NAME}"
|
||||
|
||||
echo "Downloading: ${DOWNLOAD_URL}"
|
||||
curl -L -o "${PACKAGE_NAME}" "${DOWNLOAD_URL}"
|
||||
|
||||
if [ ! -f "${PACKAGE_NAME}" ]; then
|
||||
echo "Error: Failed to download package"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "PACKAGE_NAME=${PACKAGE_NAME}" >> $GITHUB_ENV
|
||||
|
||||
- name: Calculate SHA-256 hash
|
||||
id: sha
|
||||
run: |
|
||||
SHA256_HASH=$(sha256sum "${PACKAGE_NAME}" | cut -d' ' -f1)
|
||||
echo "sha256=${SHA256_HASH}" >> $GITHUB_OUTPUT
|
||||
echo "SHA-256 Hash: ${SHA256_HASH}"
|
||||
|
||||
- name: Update updates.xml
|
||||
run: |
|
||||
TAG="${{ steps.tag.outputs.tag }}"
|
||||
SHA256="${{ steps.sha.outputs.sha256 }}"
|
||||
DATE=$(date +%Y-%m-%d)
|
||||
|
||||
# Update version
|
||||
sed -i "s|<version>.*</version>|<version>${TAG}</version>|" updates.xml
|
||||
|
||||
# Update creation date
|
||||
sed -i "s|<creationDate>.*</creationDate>|<creationDate>${DATE}</creationDate>|" updates.xml
|
||||
|
||||
# Update download URL
|
||||
sed -i "s|<downloadurl type='full' format='zip'>.*</downloadurl>|<downloadurl type='full' format='zip'>https://github.com/${{ github.repository }}/releases/download/${TAG}/mokocassiopeia-src-${TAG}.zip</downloadurl>|" updates.xml
|
||||
|
||||
# Update or add SHA-256 hash
|
||||
if grep -q "<sha256>" updates.xml; then
|
||||
sed -i "s|<sha256>.*</sha256>|<sha256>sha256:${SHA256}</sha256>|" updates.xml
|
||||
else
|
||||
# Add SHA-256 after downloadurl
|
||||
sed -i "/<\/downloadurl>/a\ <sha256>sha256:${SHA256}<\/sha256>" updates.xml
|
||||
fi
|
||||
|
||||
echo "Updated updates.xml with:"
|
||||
echo " Version: ${TAG}"
|
||||
echo " Date: ${DATE}"
|
||||
echo " SHA-256: ${SHA256}"
|
||||
|
||||
- name: Check for changes
|
||||
id: changes
|
||||
run: |
|
||||
if git diff --quiet updates.xml; then
|
||||
echo "has_changes=false" >> $GITHUB_OUTPUT
|
||||
echo "No changes to updates.xml"
|
||||
else
|
||||
echo "has_changes=true" >> $GITHUB_OUTPUT
|
||||
echo "Changes detected in updates.xml"
|
||||
git diff updates.xml
|
||||
fi
|
||||
|
||||
- name: Commit and push changes
|
||||
if: steps.changes.outputs.has_changes == 'true'
|
||||
run: |
|
||||
TAG="${{ steps.tag.outputs.tag }}"
|
||||
|
||||
git config --local user.email "github-actions[bot]@users.noreply.github.com"
|
||||
git config --local user.name "github-actions[bot]"
|
||||
|
||||
git add updates.xml
|
||||
git commit -m "chore: Update SHA-256 hash for release ${TAG} - SHA: ${{ steps.sha.outputs.sha256 }}"
|
||||
|
||||
git push origin main
|
||||
|
||||
echo "Successfully updated updates.xml with SHA-256 hash for release ${TAG}"
|
||||
|
||||
- name: Summary
|
||||
if: steps.changes.outputs.has_changes == 'true'
|
||||
run: |
|
||||
echo "### SHA-256 Hash Updated Successfully" >> $GITHUB_STEP_SUMMARY
|
||||
echo "" >> $GITHUB_STEP_SUMMARY
|
||||
echo "- Release: ${{ steps.tag.outputs.tag }}" >> $GITHUB_STEP_SUMMARY
|
||||
echo "- SHA-256: \`${{ steps.sha.outputs.sha256 }}\`" >> $GITHUB_STEP_SUMMARY
|
||||
echo "- File: updates.xml" >> $GITHUB_STEP_SUMMARY
|
||||
echo "" >> $GITHUB_STEP_SUMMARY
|
||||
echo "The Joomla update server will now provide the correct package hash." >> $GITHUB_STEP_SUMMARY
|
||||
|
||||
- name: Summary (no changes)
|
||||
if: steps.changes.outputs.has_changes == 'false'
|
||||
run: |
|
||||
echo "### No Updates Needed" >> $GITHUB_STEP_SUMMARY
|
||||
echo "" >> $GITHUB_STEP_SUMMARY
|
||||
echo "updates.xml already contains the correct SHA-256 hash for release ${{ steps.tag.outputs.tag }}" >> $GITHUB_STEP_SUMMARY
|
||||
# Copyright (C) 2026 Moko Consulting <hello@mokoconsulting.tech>
|
||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||
# FILE INFORMATION
|
||||
# DEFGROUP: GitHub.Workflow
|
||||
# INGROUP: MokoCassiopeia.Automation
|
||||
# REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoCassiopeia
|
||||
# PATH: /.github/workflows/auto-update-sha.yml
|
||||
# VERSION: 03.09.03
|
||||
# BRIEF: Automatically update SHA-256 hash in updates.xml after release
|
||||
# NOTE: Ensures updates.xml stays synchronized with release packages
|
||||
|
||||
name: Auto-Update SHA Hash
|
||||
|
||||
on:
|
||||
release:
|
||||
types: [published]
|
||||
workflow_dispatch:
|
||||
inputs:
|
||||
tag:
|
||||
description: 'Release tag to update SHA for (e.g., 03.08.03)'
|
||||
required: true
|
||||
type: string
|
||||
|
||||
permissions:
|
||||
contents: write
|
||||
|
||||
jobs:
|
||||
update-sha:
|
||||
name: Update SHA-256 Hash in updates.xml
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- name: Checkout Repository
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 0
|
||||
ref: main
|
||||
|
||||
- name: Get release tag
|
||||
id: tag
|
||||
run: |
|
||||
if [ "${{ github.event_name }}" == "workflow_dispatch" ]; then
|
||||
TAG="${{ inputs.tag }}"
|
||||
else
|
||||
TAG="${{ github.event.release.tag_name }}"
|
||||
fi
|
||||
echo "tag=${TAG}" >> $GITHUB_OUTPUT
|
||||
echo "Processing release: ${TAG}"
|
||||
|
||||
- name: Download release package
|
||||
run: |
|
||||
TAG="${{ steps.tag.outputs.tag }}"
|
||||
PACKAGE_NAME="mokocassiopeia-src-${TAG}.zip"
|
||||
DOWNLOAD_URL="https://github.com/${{ github.repository }}/releases/download/${TAG}/${PACKAGE_NAME}"
|
||||
|
||||
echo "Downloading: ${DOWNLOAD_URL}"
|
||||
curl -L -o "${PACKAGE_NAME}" "${DOWNLOAD_URL}"
|
||||
|
||||
if [ ! -f "${PACKAGE_NAME}" ]; then
|
||||
echo "Error: Failed to download package"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "PACKAGE_NAME=${PACKAGE_NAME}" >> $GITHUB_ENV
|
||||
|
||||
- name: Calculate SHA-256 hash
|
||||
id: sha
|
||||
run: |
|
||||
SHA256_HASH=$(sha256sum "${PACKAGE_NAME}" | cut -d' ' -f1)
|
||||
echo "sha256=${SHA256_HASH}" >> $GITHUB_OUTPUT
|
||||
echo "SHA-256 Hash: ${SHA256_HASH}"
|
||||
|
||||
- name: Update updates.xml
|
||||
run: |
|
||||
TAG="${{ steps.tag.outputs.tag }}"
|
||||
SHA256="${{ steps.sha.outputs.sha256 }}"
|
||||
DATE=$(date +%Y-%m-%d)
|
||||
|
||||
# Update version
|
||||
sed -i "s|<version>.*</version>|<version>${TAG}</version>|" updates.xml
|
||||
|
||||
# Update creation date
|
||||
sed -i "s|<creationDate>.*</creationDate>|<creationDate>${DATE}</creationDate>|" updates.xml
|
||||
|
||||
# Update download URL
|
||||
sed -i "s|<downloadurl type='full' format='zip'>.*</downloadurl>|<downloadurl type='full' format='zip'>https://github.com/${{ github.repository }}/releases/download/${TAG}/mokocassiopeia-src-${TAG}.zip</downloadurl>|" updates.xml
|
||||
|
||||
# Update or add SHA-256 hash
|
||||
if grep -q "<sha256>" updates.xml; then
|
||||
sed -i "s|<sha256>.*</sha256>|<sha256>sha256:${SHA256}</sha256>|" updates.xml
|
||||
else
|
||||
# Add SHA-256 after downloadurl
|
||||
sed -i "/<\/downloadurl>/a\ <sha256>sha256:${SHA256}<\/sha256>" updates.xml
|
||||
fi
|
||||
|
||||
echo "Updated updates.xml with:"
|
||||
echo " Version: ${TAG}"
|
||||
echo " Date: ${DATE}"
|
||||
echo " SHA-256: ${SHA256}"
|
||||
|
||||
- name: Check for changes
|
||||
id: changes
|
||||
run: |
|
||||
if git diff --quiet updates.xml; then
|
||||
echo "has_changes=false" >> $GITHUB_OUTPUT
|
||||
echo "No changes to updates.xml"
|
||||
else
|
||||
echo "has_changes=true" >> $GITHUB_OUTPUT
|
||||
echo "Changes detected in updates.xml"
|
||||
git diff updates.xml
|
||||
fi
|
||||
|
||||
- name: Commit and push changes
|
||||
if: steps.changes.outputs.has_changes == 'true'
|
||||
run: |
|
||||
TAG="${{ steps.tag.outputs.tag }}"
|
||||
|
||||
git config --local user.email "github-actions[bot]@users.noreply.github.com"
|
||||
git config --local user.name "github-actions[bot]"
|
||||
|
||||
git add updates.xml
|
||||
git commit -m "chore: Update SHA-256 hash for release ${TAG} - SHA: ${{ steps.sha.outputs.sha256 }}"
|
||||
|
||||
git push origin main
|
||||
|
||||
echo "Successfully updated updates.xml with SHA-256 hash for release ${TAG}"
|
||||
|
||||
- name: Summary
|
||||
if: steps.changes.outputs.has_changes == 'true'
|
||||
run: |
|
||||
echo "### SHA-256 Hash Updated Successfully" >> $GITHUB_STEP_SUMMARY
|
||||
echo "" >> $GITHUB_STEP_SUMMARY
|
||||
echo "- Release: ${{ steps.tag.outputs.tag }}" >> $GITHUB_STEP_SUMMARY
|
||||
echo "- SHA-256: \`${{ steps.sha.outputs.sha256 }}\`" >> $GITHUB_STEP_SUMMARY
|
||||
echo "- File: updates.xml" >> $GITHUB_STEP_SUMMARY
|
||||
echo "" >> $GITHUB_STEP_SUMMARY
|
||||
echo "The Joomla update server will now provide the correct package hash." >> $GITHUB_STEP_SUMMARY
|
||||
|
||||
- name: Summary (no changes)
|
||||
if: steps.changes.outputs.has_changes == 'false'
|
||||
run: |
|
||||
echo "### No Updates Needed" >> $GITHUB_STEP_SUMMARY
|
||||
echo "" >> $GITHUB_STEP_SUMMARY
|
||||
echo "updates.xml already contains the correct SHA-256 hash for release ${{ steps.tag.outputs.tag }}" >> $GITHUB_STEP_SUMMARY
|
||||
|
||||
2
.github/workflows/branch-freeze.yml
vendored
2
.github/workflows/branch-freeze.yml
vendored
@@ -5,7 +5,7 @@
|
||||
# FILE INFORMATION
|
||||
# DEFGROUP: GitHub.Workflow
|
||||
# INGROUP: MokoStandards.Automation
|
||||
# REPO: https://github.com/mokoconsulting-tech/MokoStandards
|
||||
# REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoStandards
|
||||
# PATH: /templates/workflows/shared/branch-freeze.yml.template
|
||||
# VERSION: 04.06.00
|
||||
# BRIEF: Freeze or unfreeze any branch via ruleset — manual workflow_dispatch
|
||||
|
||||
2
.github/workflows/changelog-validation.yml
vendored
2
.github/workflows/changelog-validation.yml
vendored
@@ -7,7 +7,7 @@
|
||||
# FILE INFORMATION
|
||||
# DEFGROUP: GitHub.Workflow.Template
|
||||
# INGROUP: MokoStandards.CI
|
||||
# REPO: https://github.com/mokoconsulting-tech/MokoStandards
|
||||
# REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoStandards
|
||||
# PATH: /templates/workflows/shared/changelog-validation.yml.template
|
||||
# VERSION: 04.06.00
|
||||
# BRIEF: Validates CHANGELOG.md format and version consistency
|
||||
|
||||
4
.github/workflows/ci-joomla.yml
vendored
4
.github/workflows/ci-joomla.yml
vendored
@@ -7,7 +7,7 @@
|
||||
# FILE INFORMATION
|
||||
# DEFGROUP: GitHub.Workflow.Template
|
||||
# INGROUP: MokoStandards.CI
|
||||
# REPO: https://github.com/mokoconsulting-tech/MokoStandards
|
||||
# REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoStandards
|
||||
# PATH: /templates/workflows/joomla/ci-joomla.yml.template
|
||||
# VERSION: 04.06.00
|
||||
# BRIEF: CI workflow for Joomla extensions — lint, validate, test
|
||||
@@ -51,7 +51,7 @@ jobs:
|
||||
GH_TOKEN: ${{ secrets.GH_TOKEN || github.token }}
|
||||
run: |
|
||||
git clone --depth 1 --branch version/04 --quiet \
|
||||
"https://x-access-token:${GH_TOKEN}@github.com/mokoconsulting-tech/MokoStandards.git" \
|
||||
"https://x-access-token:${GH_TOKEN}@git.mokoconsulting.tech/MokoConsulting/MokoStandards.git" \
|
||||
/tmp/mokostandards
|
||||
|
||||
- name: Install dependencies
|
||||
|
||||
2
.github/workflows/codeql-analysis.yml
vendored
2
.github/workflows/codeql-analysis.yml
vendored
@@ -7,7 +7,7 @@
|
||||
# FILE INFORMATION
|
||||
# DEFGROUP: GitHub.Workflow.Template
|
||||
# INGROUP: MokoStandards.Security
|
||||
# REPO: https://github.com/mokoconsulting-tech/MokoStandards
|
||||
# REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoStandards
|
||||
# PATH: /templates/workflows/generic/codeql-analysis.yml.template
|
||||
# VERSION: 03.09.03
|
||||
# BRIEF: CodeQL security scanning workflow (generic — all repo types)
|
||||
|
||||
4
.github/workflows/deploy-manual.yml
vendored
4
.github/workflows/deploy-manual.yml
vendored
@@ -5,7 +5,7 @@
|
||||
# FILE INFORMATION
|
||||
# DEFGROUP: GitHub.Workflow
|
||||
# INGROUP: MokoStandards.Deploy
|
||||
# REPO: https://github.com/mokoconsulting-tech/MokoStandards
|
||||
# REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoStandards
|
||||
# PATH: /templates/workflows/joomla/deploy-manual.yml.template
|
||||
# VERSION: 04.06.00
|
||||
# BRIEF: Manual SFTP deploy to dev server for Joomla repos
|
||||
@@ -52,7 +52,7 @@ jobs:
|
||||
COMPOSER_AUTH: '{"github-oauth":{"github.com":"${{ secrets.GH_TOKEN || github.token }}"}}'
|
||||
run: |
|
||||
git clone --depth 1 --branch version/04 --quiet \
|
||||
"https://x-access-token:${GH_TOKEN}@github.com/mokoconsulting-tech/MokoStandards.git" \
|
||||
"https://x-access-token:${GH_TOKEN}@git.mokoconsulting.tech/MokoConsulting/MokoStandards.git" \
|
||||
/tmp/mokostandards 2>/dev/null || true
|
||||
if [ -d "/tmp/mokostandards" ] && [ -f "/tmp/mokostandards/composer.json" ]; then
|
||||
cd /tmp/mokostandards && composer install --no-dev --no-interaction --quiet 2>/dev/null || true
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
# FILE INFORMATION
|
||||
# DEFGROUP: GitHub.Workflow
|
||||
# INGROUP: MokoStandards.Firewall
|
||||
# REPO: https://github.com/mokoconsulting-tech/MokoStandards
|
||||
# REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoStandards
|
||||
# PATH: /templates/workflows/shared/enterprise-firewall-setup.yml.template
|
||||
# VERSION: 04.06.00
|
||||
# BRIEF: Enterprise firewall configuration — generates outbound allow-rules including SFTP deployment server
|
||||
|
||||
2
.github/workflows/release.yml
vendored
2
.github/workflows/release.yml
vendored
@@ -20,7 +20,7 @@
|
||||
# FILE INFORMATION
|
||||
# DEFGROUP: GitHub.Workflow
|
||||
# INGROUP: MokoCassiopeia.Release
|
||||
# REPO: https://github.com/mokoconsulting-tech/MokoCassiopeia
|
||||
# REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoCassiopeia
|
||||
# PATH: /.github/workflows/release.yml
|
||||
# VERSION: 03.09.03
|
||||
# BRIEF: Automated release workflow for MokoCassiopeia Joomla template
|
||||
|
||||
2
.github/workflows/repo_health.yml
vendored
2
.github/workflows/repo_health.yml
vendored
@@ -8,7 +8,7 @@
|
||||
# FILE INFORMATION
|
||||
# DEFGROUP: GitHub.Workflow
|
||||
# INGROUP: MokoStandards.Validation
|
||||
# REPO: https://github.com/mokoconsulting-tech/MokoStandards
|
||||
# REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoStandards
|
||||
# PATH: /.github/workflows/repo_health.yml
|
||||
# VERSION: 04.06.00
|
||||
# BRIEF: Enforces repository guardrails by validating release configuration, scripts governance, tooling availability, and core repository health artifacts.
|
||||
|
||||
2
.github/workflows/repository-cleanup.yml
vendored
2
.github/workflows/repository-cleanup.yml
vendored
@@ -7,7 +7,7 @@
|
||||
# FILE INFORMATION
|
||||
# DEFGROUP: GitHub.Workflow
|
||||
# INGROUP: MokoStandards.Maintenance
|
||||
# REPO: https://github.com/mokoconsulting-tech/MokoStandards
|
||||
# REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoStandards
|
||||
# PATH: /templates/workflows/shared/repository-cleanup.yml.template
|
||||
# VERSION: 04.06.00
|
||||
# BRIEF: Recurring repository maintenance — labels, branches, workflows, logs, doc indexes
|
||||
|
||||
28
.github/workflows/standards-compliance.yml
vendored
28
.github/workflows/standards-compliance.yml
vendored
@@ -3,7 +3,7 @@
|
||||
# FILE INFORMATION
|
||||
# DEFGROUP: GitHub.Workflow
|
||||
# INGROUP: MokoStandards.Compliance
|
||||
# REPO: https://github.com/mokoconsulting-tech/MokoStandards
|
||||
# REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoStandards
|
||||
# PATH: /.github/workflows/standards-compliance.yml
|
||||
# VERSION: 04.06.00
|
||||
# BRIEF: MokoStandards compliance validation workflow
|
||||
@@ -323,7 +323,7 @@ jobs:
|
||||
[ ! -d "docs" ] && echo "- Create docs directory: \`mkdir docs && echo '# Documentation' > docs/README.md\`" >> $GITHUB_STEP_SUMMARY
|
||||
[ ! -d ".github" ] && echo "- Create .github directory: \`mkdir -p .github/workflows\`" >> $GITHUB_STEP_SUMMARY
|
||||
echo "" >> $GITHUB_STEP_SUMMARY
|
||||
echo "📚 Reference: [MokoStandards Repository Structure](https://github.com/mokoconsulting-tech/MokoStandards/tree/main/docs/policy/core-structure.md)" >> $GITHUB_STEP_SUMMARY
|
||||
echo "📚 Reference: [MokoStandards Repository Structure](https://git.mokoconsulting.tech/MokoConsulting/MokoStandards/tree/main/docs/policy/core-structure.md)" >> $GITHUB_STEP_SUMMARY
|
||||
echo "" >> $GITHUB_STEP_SUMMARY
|
||||
echo "### ❌ Validation Failed: Required Directories Missing" >> $GITHUB_STEP_SUMMARY
|
||||
echo "" >> $GITHUB_STEP_SUMMARY
|
||||
@@ -384,13 +384,13 @@ jobs:
|
||||
echo "### 🔴 Critical Issues: $MISSING" >> $GITHUB_STEP_SUMMARY
|
||||
echo "" >> $GITHUB_STEP_SUMMARY
|
||||
echo "**Remediation Steps:**" >> $GITHUB_STEP_SUMMARY
|
||||
[ ! -f "README.md" ] && echo "- Create README.md: Use [template](https://github.com/mokoconsulting-tech/MokoStandards/tree/main/templates/docs/required/README.md)" >> $GITHUB_STEP_SUMMARY
|
||||
[ ! -f "README.md" ] && echo "- Create README.md: Use [template](https://git.mokoconsulting.tech/MokoConsulting/MokoStandards/tree/main/templates/docs/required/README.md)" >> $GITHUB_STEP_SUMMARY
|
||||
[ ! -f "LICENSE" ] && echo "- Add LICENSE file: Choose from [OSI-approved licenses](https://opensource.org/licenses)" >> $GITHUB_STEP_SUMMARY
|
||||
[ ! -f "CONTRIBUTING.md" ] && echo "- Create CONTRIBUTING.md: Use [template](https://github.com/mokoconsulting-tech/MokoStandards/tree/main/templates/docs/required/CONTRIBUTING.md)" >> $GITHUB_STEP_SUMMARY
|
||||
[ ! -f "SECURITY.md" ] && echo "- Create SECURITY.md: Use [template](https://github.com/mokoconsulting-tech/MokoStandards/tree/main/templates/docs/required/SECURITY.md)" >> $GITHUB_STEP_SUMMARY
|
||||
[ ! -f ".editorconfig" ] && echo "- Add .editorconfig: Use [template](https://github.com/mokoconsulting-tech/MokoStandards/tree/main/templates/.editorconfig)" >> $GITHUB_STEP_SUMMARY
|
||||
[ ! -f "CONTRIBUTING.md" ] && echo "- Create CONTRIBUTING.md: Use [template](https://git.mokoconsulting.tech/MokoConsulting/MokoStandards/tree/main/templates/docs/required/CONTRIBUTING.md)" >> $GITHUB_STEP_SUMMARY
|
||||
[ ! -f "SECURITY.md" ] && echo "- Create SECURITY.md: Use [template](https://git.mokoconsulting.tech/MokoConsulting/MokoStandards/tree/main/templates/docs/required/SECURITY.md)" >> $GITHUB_STEP_SUMMARY
|
||||
[ ! -f ".editorconfig" ] && echo "- Add .editorconfig: Use [template](https://git.mokoconsulting.tech/MokoConsulting/MokoStandards/tree/main/templates/.editorconfig)" >> $GITHUB_STEP_SUMMARY
|
||||
echo "" >> $GITHUB_STEP_SUMMARY
|
||||
echo "📚 Reference: [MokoStandards File Requirements](https://github.com/mokoconsulting-tech/MokoStandards/tree/main/docs/policy/file-header-standards.md)" >> $GITHUB_STEP_SUMMARY
|
||||
echo "📚 Reference: [MokoStandards File Requirements](https://git.mokoconsulting.tech/MokoConsulting/MokoStandards/tree/main/docs/policy/file-header-standards.md)" >> $GITHUB_STEP_SUMMARY
|
||||
echo "" >> $GITHUB_STEP_SUMMARY
|
||||
echo "### ❌ Validation Failed: Required Files Missing" >> $GITHUB_STEP_SUMMARY
|
||||
echo "" >> $GITHUB_STEP_SUMMARY
|
||||
@@ -510,7 +510,7 @@ jobs:
|
||||
COMPOSER_AUTH: '{"github-oauth":{"github.com":"${{ secrets.GH_TOKEN || github.token }}"}}'
|
||||
run: |
|
||||
git clone --depth 1 --branch version/04 --quiet \
|
||||
"https://x-access-token:${GH_TOKEN}@github.com/mokoconsulting-tech/MokoStandards.git" \
|
||||
"https://x-access-token:${GH_TOKEN}@git.mokoconsulting.tech/MokoConsulting/MokoStandards.git" \
|
||||
/tmp/mokostandards 2>/dev/null || true
|
||||
if [ -d "/tmp/mokostandards" ] && [ -f "/tmp/mokostandards/composer.json" ]; then
|
||||
cd /tmp/mokostandards
|
||||
@@ -1979,7 +1979,7 @@ jobs:
|
||||
echo "No composer.json — pulling MokoStandards tools"
|
||||
if [ ! -d "/tmp/mokostandards" ]; then
|
||||
git clone --depth 1 --branch version/04 --quiet \
|
||||
"https://x-access-token:${GH_TOKEN}@github.com/mokoconsulting-tech/MokoStandards.git" \
|
||||
"https://x-access-token:${GH_TOKEN}@git.mokoconsulting.tech/MokoConsulting/MokoStandards.git" \
|
||||
/tmp/mokostandards 2>/dev/null || true
|
||||
if [ -f "/tmp/mokostandards/composer.json" ]; then
|
||||
cd /tmp/mokostandards && composer install --no-dev --no-interaction --quiet 2>/dev/null || true
|
||||
@@ -2051,7 +2051,7 @@ jobs:
|
||||
echo "No composer.json — pulling MokoStandards tools"
|
||||
if [ ! -d "/tmp/mokostandards" ]; then
|
||||
git clone --depth 1 --branch version/04 --quiet \
|
||||
"https://x-access-token:${GH_TOKEN}@github.com/mokoconsulting-tech/MokoStandards.git" \
|
||||
"https://x-access-token:${GH_TOKEN}@git.mokoconsulting.tech/MokoConsulting/MokoStandards.git" \
|
||||
/tmp/mokostandards 2>/dev/null || true
|
||||
if [ -f "/tmp/mokostandards/composer.json" ]; then
|
||||
cd /tmp/mokostandards && composer install --no-dev --no-interaction --quiet 2>/dev/null || true
|
||||
@@ -2501,10 +2501,10 @@ jobs:
|
||||
echo "---" >> $GITHUB_STEP_SUMMARY
|
||||
echo "" >> $GITHUB_STEP_SUMMARY
|
||||
echo "📚 **Resources:**" >> $GITHUB_STEP_SUMMARY
|
||||
echo "- [MokoStandards Documentation](https://github.com/mokoconsulting-tech/MokoStandards)" >> $GITHUB_STEP_SUMMARY
|
||||
echo "- [Repository Structure Guide](https://github.com/mokoconsulting-tech/MokoStandards/tree/main/docs/policy/core-structure.md)" >> $GITHUB_STEP_SUMMARY
|
||||
echo "- [Documentation Standards](https://github.com/mokoconsulting-tech/MokoStandards/tree/main/docs/policy/document-formatting.md)" >> $GITHUB_STEP_SUMMARY
|
||||
echo "- [Coding Standards](https://github.com/mokoconsulting-tech/MokoStandards/tree/main/docs/policy/coding-style-guide.md)" >> $GITHUB_STEP_SUMMARY
|
||||
echo "- [MokoStandards Documentation](https://git.mokoconsulting.tech/MokoConsulting/MokoStandards)" >> $GITHUB_STEP_SUMMARY
|
||||
echo "- [Repository Structure Guide](https://git.mokoconsulting.tech/MokoConsulting/MokoStandards/tree/main/docs/policy/core-structure.md)" >> $GITHUB_STEP_SUMMARY
|
||||
echo "- [Documentation Standards](https://git.mokoconsulting.tech/MokoConsulting/MokoStandards/tree/main/docs/policy/document-formatting.md)" >> $GITHUB_STEP_SUMMARY
|
||||
echo "- [Coding Standards](https://git.mokoconsulting.tech/MokoConsulting/MokoStandards/tree/main/docs/policy/coding-style-guide.md)" >> $GITHUB_STEP_SUMMARY
|
||||
echo "" >> $GITHUB_STEP_SUMMARY
|
||||
echo "_Generated by MokoStandards Compliance Workflow v${WORKFLOW_VERSION}_" >> $GITHUB_STEP_SUMMARY
|
||||
|
||||
|
||||
4
.github/workflows/sync-version-on-merge.yml
vendored
4
.github/workflows/sync-version-on-merge.yml
vendored
@@ -7,7 +7,7 @@
|
||||
# FILE INFORMATION
|
||||
# DEFGROUP: GitHub.Workflow
|
||||
# INGROUP: MokoStandards.Automation
|
||||
# REPO: https://github.com/mokoconsulting-tech/MokoStandards
|
||||
# REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoStandards
|
||||
# PATH: /templates/workflows/shared/sync-version-on-merge.yml.template
|
||||
# VERSION: 04.06.00
|
||||
# BRIEF: Auto-bump patch version on every push to main and propagate to all file headers
|
||||
@@ -61,7 +61,7 @@ jobs:
|
||||
COMPOSER_AUTH: '{"github-oauth":{"github.com":"${{ secrets.GH_TOKEN || github.token }}"}}'
|
||||
run: |
|
||||
git clone --depth 1 --branch version/04 --quiet \
|
||||
"https://x-access-token:${GH_TOKEN}@github.com/mokoconsulting-tech/MokoStandards.git" \
|
||||
"https://x-access-token:${GH_TOKEN}@git.mokoconsulting.tech/MokoConsulting/MokoStandards.git" \
|
||||
/tmp/mokostandards
|
||||
cd /tmp/mokostandards
|
||||
composer install --no-dev --no-interaction --quiet
|
||||
|
||||
4
.github/workflows/update-server.yml
vendored
4
.github/workflows/update-server.yml
vendored
@@ -5,7 +5,7 @@
|
||||
# FILE INFORMATION
|
||||
# DEFGROUP: GitHub.Workflow
|
||||
# INGROUP: MokoStandards.Joomla
|
||||
# REPO: https://github.com/mokoconsulting-tech/MokoStandards
|
||||
# REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoStandards
|
||||
# PATH: /templates/workflows/joomla/update-server.yml.template
|
||||
# VERSION: 04.06.00
|
||||
# BRIEF: Update Joomla update server XML feed with stable/rc/dev entries
|
||||
@@ -70,7 +70,7 @@ jobs:
|
||||
COMPOSER_AUTH: '{"github-oauth":{"github.com":"${{ secrets.GH_TOKEN || github.token }}"}}'
|
||||
run: |
|
||||
git clone --depth 1 --branch version/04 --quiet \
|
||||
"https://x-access-token:${GH_TOKEN}@github.com/mokoconsulting-tech/MokoStandards.git" \
|
||||
"https://x-access-token:${GH_TOKEN}@git.mokoconsulting.tech/MokoConsulting/MokoStandards.git" \
|
||||
/tmp/mokostandards 2>/dev/null || true
|
||||
if [ -d "/tmp/mokostandards" ] && [ -f "/tmp/mokostandards/composer.json" ]; then
|
||||
cd /tmp/mokostandards && composer install --no-dev --no-interaction --quiet 2>/dev/null || true
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
# FILE INFORMATION
|
||||
# DEFGROUP: MokoStandards.Templates.Config
|
||||
# INGROUP: MokoStandards.Templates
|
||||
# REPO: https://github.com/mokoconsulting-tech/MokoStandards
|
||||
# REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoStandards
|
||||
# PATH: /templates/configs/moko-standards.yml
|
||||
# VERSION: 04.01.00
|
||||
# BRIEF: Governance attachment template — synced to .moko-standards in every governed repository
|
||||
@@ -12,9 +12,9 @@
|
||||
# This file is managed automatically by MokoStandards bulk sync.
|
||||
# Do not edit manually — changes will be overwritten on the next sync.
|
||||
# To update governance settings, open a PR in MokoStandards instead:
|
||||
# https://github.com/mokoconsulting-tech/MokoStandards
|
||||
# https://git.mokoconsulting.tech/MokoConsulting/MokoStandards
|
||||
|
||||
standards_source: "https://github.com/mokoconsulting-tech/MokoStandards"
|
||||
standards_source: "https://git.mokoconsulting.tech/MokoConsulting/MokoStandards"
|
||||
standards_version: "04.00.04"
|
||||
platform: "waas-component"
|
||||
governed_repo: "mokoconsulting-tech/MokoCassiopeia"
|
||||
governed_repo: "MokoConsulting/MokoCassiopeia"
|
||||
|
||||
@@ -577,8 +577,8 @@ This release includes a complete rebrand from "Moko-Cassiopeia" (hyphenated) to
|
||||
## Links
|
||||
|
||||
- **Full Roadmap**: [MokoCassiopeia Roadmap](https://mokoconsulting.tech/support/joomla-cms/mokocassiopeia-roadmap)
|
||||
- **Repository**: [GitHub](https://github.com/mokoconsulting-tech/MokoCassiopeia)
|
||||
- **Issue Tracker**: [GitHub Issues](https://github.com/mokoconsulting-tech/MokoCassiopeia/issues)
|
||||
- **Repository**: [GitHub](https://git.mokoconsulting.tech/MokoConsulting/MokoCassiopeia)
|
||||
- **Issue Tracker**: [GitHub Issues](https://git.mokoconsulting.tech/MokoConsulting/MokoCassiopeia/issues)
|
||||
|
||||
## Version Format
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
# FILE INFORMATION
|
||||
DEFGROUP: Joomla.Template
|
||||
INGROUP: MokoCassiopeia.Governance
|
||||
REPO: https://github.com/mokoconsulting-tech/MokoCassiopeia
|
||||
REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoCassiopeia
|
||||
FILE: CODE_OF_CONDUCT.md
|
||||
VERSION: 03.09.03
|
||||
BRIEF: Contributor code of conduct for the MokoCassiopeia project.
|
||||
@@ -83,7 +83,7 @@ This project is managed from Tennessee, USA. This statement is informational and
|
||||
## Metadata
|
||||
|
||||
* **Document:** CODE_OF_CONDUCT.md
|
||||
* **Repository:** [https://github.com/mokoconsulting-tech/MokoCassiopeia](https://github.com/mokoconsulting-tech/MokoCassiopeia)
|
||||
* **Repository:** [https://git.mokoconsulting.tech/MokoConsulting/MokoCassiopeia](https://git.mokoconsulting.tech/MokoConsulting/MokoCassiopeia)
|
||||
* **Path:** /CODE_OF_CONDUCT.md
|
||||
* **Owner:** Moko Consulting
|
||||
* **Version:** 03.06.00
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
# FILE INFORMATION
|
||||
DEFGROUP: Joomla.Template
|
||||
INGROUP: MokoCassiopeia.Governance
|
||||
REPO: https://github.com/mokoconsulting-tech/MokoCassiopeia
|
||||
REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoCassiopeia
|
||||
FILE: CONTRIBUTING.md
|
||||
VERSION: 03.09.03
|
||||
BRIEF: Contribution guidelines for the MokoCassiopeia project.
|
||||
@@ -43,7 +43,7 @@ For first-time contributors:
|
||||
|
||||
```bash
|
||||
# Clone the repository
|
||||
git clone https://github.com/mokoconsulting-tech/MokoCassiopeia.git
|
||||
git clone https://git.mokoconsulting.tech/MokoConsulting/MokoCassiopeia.git
|
||||
cd MokoCassiopeia
|
||||
```
|
||||
|
||||
@@ -130,7 +130,7 @@ Participation in this project is governed by the Code of Conduct. Unacceptable b
|
||||
## Metadata
|
||||
|
||||
* **Document:** CONTRIBUTING.md
|
||||
* **Repository:** [https://github.com/mokoconsulting-tech/MokoCassiopeia](https://github.com/mokoconsulting-tech/MokoCassiopeia)
|
||||
* **Repository:** [https://git.mokoconsulting.tech/MokoConsulting/MokoCassiopeia](https://git.mokoconsulting.tech/MokoConsulting/MokoCassiopeia)
|
||||
* **Path:** /CONTRIBUTING.md
|
||||
* **Owner:** Moko Consulting
|
||||
* **Version:** 03.06.00
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
# FILE INFORMATION
|
||||
DEFGROUP: Joomla.Template
|
||||
INGROUP: MokoCassiopeia.Governance
|
||||
REPO: https://github.com/mokoconsulting-tech/MokoCassiopeia
|
||||
REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoCassiopeia
|
||||
FILE: GOVERNANCE.md
|
||||
VERSION: 03.09.03
|
||||
BRIEF: Project governance model, roles, and decision processes for MokoCassiopeia.
|
||||
@@ -100,7 +100,7 @@ This project is managed from Tennessee, USA. This statement is informational and
|
||||
## Metadata
|
||||
|
||||
* **Document:** GOVERNANCE.md
|
||||
* **Repository:** [https://github.com/mokoconsulting-tech/MokoCassiopeia](https://github.com/mokoconsulting-tech/MokoCassiopeia)
|
||||
* **Repository:** [https://git.mokoconsulting.tech/MokoConsulting/MokoCassiopeia](https://git.mokoconsulting.tech/MokoConsulting/MokoCassiopeia)
|
||||
* **Path:** /GOVERNANCE.md
|
||||
* **Owner:** Moko Consulting
|
||||
* **Version:** 03.06.00
|
||||
|
||||
390
Makefile
390
Makefile
@@ -1,58 +1,32 @@
|
||||
# Makefile for Joomla Extensions
|
||||
# Makefile for MokoCassiopeia Joomla Template
|
||||
# Copyright (C) 2026 Moko Consulting <hello@mokoconsulting.tech>
|
||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||
#
|
||||
# This is a reference Makefile for building Joomla extensions.
|
||||
# Copy this to your repository root as "Makefile" and customize as needed.
|
||||
#
|
||||
# Supports: Modules, Plugins, Components, Packages, Templates
|
||||
# Build and validation powered by MokoStandards Enterprise API
|
||||
# Install: composer install
|
||||
|
||||
# ==============================================================================
|
||||
# CONFIGURATION - Customize these for your extension
|
||||
# CONFIGURATION
|
||||
# ==============================================================================
|
||||
|
||||
# Extension Configuration
|
||||
EXTENSION_NAME := mokoexample
|
||||
EXTENSION_TYPE := module
|
||||
# Options: module, plugin, component, package, template
|
||||
EXTENSION_VERSION := 1.0.0
|
||||
EXTENSION_NAME := mokocassiopeia
|
||||
EXTENSION_TYPE := template
|
||||
EXTENSION_VERSION := $(shell grep -oP 'VERSION:\s*\K[0-9.]+' README.md 2>/dev/null || echo "0.0.0")
|
||||
|
||||
# Module Configuration (for modules only)
|
||||
MODULE_TYPE := site
|
||||
# Options: site, admin
|
||||
|
||||
# Plugin Configuration (for plugins only)
|
||||
PLUGIN_GROUP := system
|
||||
# Options: system, content, user, authentication, etc.
|
||||
|
||||
# Directories
|
||||
SRC_DIR := .
|
||||
SRC_DIR := src
|
||||
BUILD_DIR := build
|
||||
DIST_DIR := dist
|
||||
DOCS_DIR := docs
|
||||
DIST_DIR := dist
|
||||
|
||||
# Joomla Installation (for local testing - customize paths)
|
||||
JOOMLA_ROOT := /var/www/html/joomla
|
||||
JOOMLA_VERSION := 4
|
||||
|
||||
# Tools
|
||||
PHP := php
|
||||
PHP := php
|
||||
COMPOSER := composer
|
||||
NPM := npm
|
||||
PHPCS := vendor/bin/phpcs
|
||||
PHPCBF := vendor/bin/phpcbf
|
||||
PHPUNIT := vendor/bin/phpunit
|
||||
ZIP := zip
|
||||
MOKO := vendor/bin/moko
|
||||
|
||||
# Coding Standards
|
||||
PHPCS_STANDARD := Joomla
|
||||
|
||||
# Colors for output
|
||||
COLOR_RESET := \033[0m
|
||||
COLOR_GREEN := \033[32m
|
||||
# Colors
|
||||
COLOR_RESET := \033[0m
|
||||
COLOR_GREEN := \033[32m
|
||||
COLOR_YELLOW := \033[33m
|
||||
COLOR_BLUE := \033[34m
|
||||
COLOR_RED := \033[31m
|
||||
COLOR_BLUE := \033[34m
|
||||
COLOR_RED := \033[31m
|
||||
|
||||
# ==============================================================================
|
||||
# TARGETS
|
||||
@@ -61,92 +35,85 @@ COLOR_RED := \033[31m
|
||||
.PHONY: help
|
||||
help: ## Show this help message
|
||||
@echo "$(COLOR_BLUE)╔════════════════════════════════════════════════════════════╗$(COLOR_RESET)"
|
||||
@echo "$(COLOR_BLUE)║ Joomla Extension Makefile ║$(COLOR_RESET)"
|
||||
@echo "$(COLOR_BLUE)║ MokoCassiopeia Template Build ║$(COLOR_RESET)"
|
||||
@echo "$(COLOR_BLUE)╚════════════════════════════════════════════════════════════╝$(COLOR_RESET)"
|
||||
@echo ""
|
||||
@echo "Extension: $(EXTENSION_NAME) ($(EXTENSION_TYPE)) v$(EXTENSION_VERSION)"
|
||||
@echo "Powered by: MokoStandards Enterprise API"
|
||||
@echo ""
|
||||
@echo "$(COLOR_GREEN)Available targets:$(COLOR_RESET)"
|
||||
@grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | awk 'BEGIN {FS = ":.*?## "}; {printf " $(COLOR_BLUE)%-20s$(COLOR_RESET) %s\n", $$1, $$2}'
|
||||
@echo ""
|
||||
@echo "$(COLOR_YELLOW)Quick Start:$(COLOR_RESET)"
|
||||
@echo " 1. make install-deps # Install dependencies"
|
||||
@echo " 2. make build # Build extension package"
|
||||
@echo " 3. make test # Run tests"
|
||||
@echo ""
|
||||
|
||||
# ── Dependencies ──────────────────────────────────────────────────────────────
|
||||
|
||||
.PHONY: install-deps
|
||||
install-deps: ## Install all dependencies (Composer + npm)
|
||||
install-deps: ## Install Composer dependencies (includes MokoStandards API)
|
||||
@echo "$(COLOR_BLUE)Installing dependencies...$(COLOR_RESET)"
|
||||
@if [ -f "composer.json" ]; then \
|
||||
$(COMPOSER) install; \
|
||||
echo "$(COLOR_GREEN)✓ Composer dependencies installed$(COLOR_RESET)"; \
|
||||
fi
|
||||
@if [ -f "package.json" ]; then \
|
||||
$(NPM) install; \
|
||||
echo "$(COLOR_GREEN)✓ npm dependencies installed$(COLOR_RESET)"; \
|
||||
fi
|
||||
@$(COMPOSER) install
|
||||
@echo "$(COLOR_GREEN)✓ Dependencies installed$(COLOR_RESET)"
|
||||
|
||||
.PHONY: update-deps
|
||||
update-deps: ## Update all dependencies
|
||||
update-deps: ## Update Composer dependencies
|
||||
@echo "$(COLOR_BLUE)Updating dependencies...$(COLOR_RESET)"
|
||||
@if [ -f "composer.json" ]; then \
|
||||
$(COMPOSER) update; \
|
||||
echo "$(COLOR_GREEN)✓ Composer dependencies updated$(COLOR_RESET)"; \
|
||||
fi
|
||||
@if [ -f "package.json" ]; then \
|
||||
$(NPM) update; \
|
||||
echo "$(COLOR_GREEN)✓ npm dependencies updated$(COLOR_RESET)"; \
|
||||
@$(COMPOSER) update
|
||||
@echo "$(COLOR_GREEN)✓ Dependencies updated$(COLOR_RESET)"
|
||||
|
||||
# ── Validation (MokoStandards API) ────────────────────────────────────────────
|
||||
|
||||
.PHONY: check-moko
|
||||
check-moko:
|
||||
@if [ ! -f "$(MOKO)" ]; then \
|
||||
echo "$(COLOR_RED)✗ MokoStandards CLI not found. Run: make install-deps$(COLOR_RESET)"; \
|
||||
exit 1; \
|
||||
fi
|
||||
|
||||
.PHONY: lint
|
||||
lint: ## Run PHP linter (syntax check)
|
||||
@echo "$(COLOR_BLUE)Running PHP linter...$(COLOR_RESET)"
|
||||
@find . -name "*.php" ! -path "./vendor/*" ! -path "./node_modules/*" ! -path "./$(BUILD_DIR)/*" \
|
||||
-exec $(PHP) -l {} \; | grep -v "No syntax errors" || true
|
||||
@echo "$(COLOR_GREEN)✓ PHP linting complete$(COLOR_RESET)"
|
||||
lint: check-moko ## PHP syntax check via MokoStandards
|
||||
@echo "$(COLOR_BLUE)Running PHP syntax check...$(COLOR_RESET)"
|
||||
@$(PHP) $(MOKO) check:syntax -- --path .
|
||||
@echo "$(COLOR_GREEN)✓ PHP syntax OK$(COLOR_RESET)"
|
||||
|
||||
.PHONY: phpcs
|
||||
phpcs: ## Run PHP CodeSniffer (Joomla standards)
|
||||
@echo "$(COLOR_BLUE)Running PHP CodeSniffer...$(COLOR_RESET)"
|
||||
@if [ -f "$(PHPCS)" ]; then \
|
||||
$(PHPCS) --standard=$(PHPCS_STANDARD) --extensions=php --ignore=vendor,node_modules,$(BUILD_DIR) .; \
|
||||
else \
|
||||
echo "$(COLOR_YELLOW)⚠ PHP CodeSniffer not installed. Run: make install-deps$(COLOR_RESET)"; \
|
||||
fi
|
||||
.PHONY: check-joomla
|
||||
check-joomla: check-moko ## Validate Joomla manifest via MokoStandards
|
||||
@echo "$(COLOR_BLUE)Validating Joomla manifest...$(COLOR_RESET)"
|
||||
@$(PHP) $(MOKO) check:joomla -- --path .
|
||||
@echo "$(COLOR_GREEN)✓ Joomla manifest valid$(COLOR_RESET)"
|
||||
|
||||
.PHONY: phpcbf
|
||||
phpcbf: ## Fix coding standards automatically
|
||||
@echo "$(COLOR_BLUE)Running PHP Code Beautifier...$(COLOR_RESET)"
|
||||
@if [ -f "$(PHPCBF)" ]; then \
|
||||
$(PHPCBF) --standard=$(PHPCS_STANDARD) --extensions=php --ignore=vendor,node_modules,$(BUILD_DIR) .; \
|
||||
echo "$(COLOR_GREEN)✓ Code formatting applied$(COLOR_RESET)"; \
|
||||
else \
|
||||
echo "$(COLOR_YELLOW)⚠ PHP Code Beautifier not installed. Run: make install-deps$(COLOR_RESET)"; \
|
||||
fi
|
||||
.PHONY: check-version
|
||||
check-version: check-moko ## Verify version consistency across files
|
||||
@echo "$(COLOR_BLUE)Checking version consistency...$(COLOR_RESET)"
|
||||
@$(PHP) $(MOKO) check:version -- --path .
|
||||
@echo "$(COLOR_GREEN)✓ Versions consistent$(COLOR_RESET)"
|
||||
|
||||
.PHONY: check-headers
|
||||
check-headers: check-moko ## Check license headers on source files
|
||||
@echo "$(COLOR_BLUE)Checking license headers...$(COLOR_RESET)"
|
||||
@$(PHP) $(MOKO) check:headers -- --path .
|
||||
@echo "$(COLOR_GREEN)✓ Headers OK$(COLOR_RESET)"
|
||||
|
||||
.PHONY: check-secrets
|
||||
check-secrets: check-moko ## Scan for leaked credentials
|
||||
@echo "$(COLOR_BLUE)Scanning for secrets...$(COLOR_RESET)"
|
||||
@$(PHP) $(MOKO) check:secrets -- --path .
|
||||
@echo "$(COLOR_GREEN)✓ No secrets found$(COLOR_RESET)"
|
||||
|
||||
.PHONY: check-xml
|
||||
check-xml: check-moko ## Validate XML files are well-formed
|
||||
@echo "$(COLOR_BLUE)Checking XML files...$(COLOR_RESET)"
|
||||
@$(PHP) $(MOKO) check:xml -- --path .
|
||||
@echo "$(COLOR_GREEN)✓ XML well-formed$(COLOR_RESET)"
|
||||
|
||||
.PHONY: validate
|
||||
validate: lint phpcs ## Run all validation checks
|
||||
validate: lint check-joomla check-version check-xml check-headers check-secrets ## Run all MokoStandards validation checks
|
||||
@echo "$(COLOR_GREEN)✓ All validation checks passed$(COLOR_RESET)"
|
||||
|
||||
.PHONY: test
|
||||
test: ## Run PHPUnit tests
|
||||
@echo "$(COLOR_BLUE)Running tests...$(COLOR_RESET)"
|
||||
@if [ -f "$(PHPUNIT)" ] && [ -f "phpunit.xml" ]; then \
|
||||
$(PHPUNIT); \
|
||||
else \
|
||||
echo "$(COLOR_YELLOW)⚠ PHPUnit not configured$(COLOR_RESET)"; \
|
||||
fi
|
||||
.PHONY: health
|
||||
health: check-moko ## Full repository health check via MokoStandards
|
||||
@echo "$(COLOR_BLUE)Running full health check...$(COLOR_RESET)"
|
||||
@$(PHP) $(MOKO) health -- --path .
|
||||
|
||||
.PHONY: test-coverage
|
||||
test-coverage: ## Run tests with coverage report
|
||||
@echo "$(COLOR_BLUE)Running tests with coverage...$(COLOR_RESET)"
|
||||
@if [ -f "$(PHPUNIT)" ] && [ -f "phpunit.xml" ]; then \
|
||||
$(PHPUNIT) --coverage-html $(BUILD_DIR)/coverage; \
|
||||
echo "$(COLOR_GREEN)✓ Coverage report: $(BUILD_DIR)/coverage/index.html$(COLOR_RESET)"; \
|
||||
else \
|
||||
echo "$(COLOR_YELLOW)⚠ PHPUnit not configured$(COLOR_RESET)"; \
|
||||
fi
|
||||
# ── Build ─────────────────────────────────────────────────────────────────────
|
||||
|
||||
.PHONY: clean
|
||||
clean: ## Clean build artifacts
|
||||
@@ -155,179 +122,78 @@ clean: ## Clean build artifacts
|
||||
@echo "$(COLOR_GREEN)✓ Build artifacts cleaned$(COLOR_RESET)"
|
||||
|
||||
.PHONY: build
|
||||
build: clean validate ## Build extension package
|
||||
@echo "$(COLOR_BLUE)Building Joomla extension package...$(COLOR_RESET)"
|
||||
@mkdir -p $(DIST_DIR) $(BUILD_DIR)
|
||||
|
||||
# Determine package prefix based on extension type
|
||||
@case "$(EXTENSION_TYPE)" in \
|
||||
module) \
|
||||
PACKAGE_PREFIX="mod_$(EXTENSION_NAME)"; \
|
||||
BUILD_TARGET="$(BUILD_DIR)/$$PACKAGE_PREFIX"; \
|
||||
;; \
|
||||
plugin) \
|
||||
PACKAGE_PREFIX="plg_$(PLUGIN_GROUP)_$(EXTENSION_NAME)"; \
|
||||
BUILD_TARGET="$(BUILD_DIR)/$$PACKAGE_PREFIX"; \
|
||||
;; \
|
||||
component) \
|
||||
PACKAGE_PREFIX="com_$(EXTENSION_NAME)"; \
|
||||
BUILD_TARGET="$(BUILD_DIR)/$$PACKAGE_PREFIX"; \
|
||||
;; \
|
||||
package) \
|
||||
PACKAGE_PREFIX="pkg_$(EXTENSION_NAME)"; \
|
||||
BUILD_TARGET="$(BUILD_DIR)/$$PACKAGE_PREFIX"; \
|
||||
;; \
|
||||
template) \
|
||||
PACKAGE_PREFIX="tpl_$(EXTENSION_NAME)"; \
|
||||
BUILD_TARGET="$(BUILD_DIR)/$$PACKAGE_PREFIX"; \
|
||||
;; \
|
||||
*) \
|
||||
echo "$(COLOR_RED)✗ Unknown extension type: $(EXTENSION_TYPE)$(COLOR_RESET)"; \
|
||||
build: clean ## Build template installable ZIP from src/
|
||||
@echo "$(COLOR_BLUE)Building $(EXTENSION_NAME) v$(EXTENSION_VERSION)...$(COLOR_RESET)"
|
||||
@mkdir -p $(BUILD_DIR)/package $(DIST_DIR)
|
||||
@cp -r $(SRC_DIR)/* $(BUILD_DIR)/package/
|
||||
@cd $(BUILD_DIR)/package && \
|
||||
if command -v zip >/dev/null 2>&1; then \
|
||||
zip -r "../../$(DIST_DIR)/$(EXTENSION_NAME)-$(EXTENSION_VERSION).zip" .; \
|
||||
elif command -v pwsh >/dev/null 2>&1; then \
|
||||
pwsh -Command "Compress-Archive -Path '*' -DestinationPath '../../$(DIST_DIR)/$(EXTENSION_NAME)-$(EXTENSION_VERSION).zip' -Force"; \
|
||||
elif command -v powershell >/dev/null 2>&1; then \
|
||||
powershell -Command "Compress-Archive -Path '*' -DestinationPath '../../$(DIST_DIR)/$(EXTENSION_NAME)-$(EXTENSION_VERSION).zip' -Force"; \
|
||||
else \
|
||||
echo "$(COLOR_RED)✗ No zip tool found (zip, pwsh, powershell)$(COLOR_RESET)"; \
|
||||
exit 1; \
|
||||
;; \
|
||||
esac; \
|
||||
\
|
||||
mkdir -p "$$BUILD_TARGET"; \
|
||||
\
|
||||
echo "Building $$PACKAGE_PREFIX..."; \
|
||||
\
|
||||
rsync -av --progress \
|
||||
--exclude='$(BUILD_DIR)' \
|
||||
--exclude='$(DIST_DIR)' \
|
||||
--exclude='.git*' \
|
||||
--exclude='vendor/' \
|
||||
--exclude='node_modules/' \
|
||||
--exclude='tests/' \
|
||||
--exclude='Makefile' \
|
||||
--exclude='composer.json' \
|
||||
--exclude='composer.lock' \
|
||||
--exclude='package.json' \
|
||||
--exclude='package-lock.json' \
|
||||
--exclude='phpunit.xml' \
|
||||
--exclude='*.md' \
|
||||
--exclude='.editorconfig' \
|
||||
. "$$BUILD_TARGET/"; \
|
||||
\
|
||||
cd $(BUILD_DIR) && $(ZIP) -r "../$(DIST_DIR)/$${PACKAGE_PREFIX}-$(EXTENSION_VERSION).zip" "$${PACKAGE_PREFIX}"; \
|
||||
\
|
||||
echo "$(COLOR_GREEN)✓ Package created: $(DIST_DIR)/$${PACKAGE_PREFIX}-$(EXTENSION_VERSION).zip$(COLOR_RESET)"
|
||||
fi
|
||||
@echo "$(COLOR_GREEN)✓ Package: $(DIST_DIR)/$(EXTENSION_NAME)-$(EXTENSION_VERSION).zip$(COLOR_RESET)"
|
||||
|
||||
.PHONY: package
|
||||
package: build ## Alias for build
|
||||
@echo "$(COLOR_GREEN)✓ Package ready for distribution$(COLOR_RESET)"
|
||||
|
||||
.PHONY: install-local
|
||||
install-local: build ## Install to local Joomla (upload via admin)
|
||||
@echo "$(COLOR_BLUE)Package ready for installation$(COLOR_RESET)"
|
||||
@case "$(EXTENSION_TYPE)" in \
|
||||
module) PACKAGE="mod_$(EXTENSION_NAME)";; \
|
||||
plugin) PACKAGE="plg_$(PLUGIN_GROUP)_$(EXTENSION_NAME)";; \
|
||||
component) PACKAGE="com_$(EXTENSION_NAME)";; \
|
||||
package) PACKAGE="pkg_$(EXTENSION_NAME)";; \
|
||||
template) PACKAGE="tpl_$(EXTENSION_NAME)";; \
|
||||
esac; \
|
||||
echo "$(COLOR_YELLOW)Upload $(DIST_DIR)/$${PACKAGE}-$(EXTENSION_VERSION).zip via Joomla Administrator$(COLOR_RESET)"; \
|
||||
echo "Admin URL: $(JOOMLA_ROOT) → Extensions → Install"
|
||||
|
||||
.PHONY: dev-install
|
||||
dev-install: ## Create symlink for development (Joomla 4+)
|
||||
@echo "$(COLOR_BLUE)Creating development symlink...$(COLOR_RESET)"
|
||||
@if [ ! -d "$(JOOMLA_ROOT)" ]; then \
|
||||
echo "$(COLOR_RED)✗ Joomla root not found at $(JOOMLA_ROOT)$(COLOR_RESET)"; \
|
||||
echo "Update JOOMLA_ROOT in Makefile"; \
|
||||
exit 1; \
|
||||
fi
|
||||
|
||||
@case "$(EXTENSION_TYPE)" in \
|
||||
module) \
|
||||
if [ "$(MODULE_TYPE)" = "admin" ]; then \
|
||||
TARGET="$(JOOMLA_ROOT)/administrator/modules/mod_$(EXTENSION_NAME)"; \
|
||||
else \
|
||||
TARGET="$(JOOMLA_ROOT)/modules/mod_$(EXTENSION_NAME)"; \
|
||||
fi; \
|
||||
;; \
|
||||
plugin) \
|
||||
TARGET="$(JOOMLA_ROOT)/plugins/$(PLUGIN_GROUP)/$(EXTENSION_NAME)"; \
|
||||
;; \
|
||||
component) \
|
||||
echo "$(COLOR_YELLOW)⚠ Components require complex symlink setup$(COLOR_RESET)"; \
|
||||
echo "Manual setup recommended for component development"; \
|
||||
.PHONY: build-beta
|
||||
build-beta: clean ## Build beta release ZIP
|
||||
@echo "$(COLOR_BLUE)Building $(EXTENSION_NAME) v$(EXTENSION_VERSION)-beta...$(COLOR_RESET)"
|
||||
@mkdir -p $(BUILD_DIR)/package $(DIST_DIR)
|
||||
@cp -r $(SRC_DIR)/* $(BUILD_DIR)/package/
|
||||
@cd $(BUILD_DIR)/package && \
|
||||
if command -v zip >/dev/null 2>&1; then \
|
||||
zip -r "../../$(DIST_DIR)/$(EXTENSION_NAME)-$(EXTENSION_VERSION)-beta.zip" .; \
|
||||
elif command -v pwsh >/dev/null 2>&1; then \
|
||||
pwsh -Command "Compress-Archive -Path '*' -DestinationPath '../../$(DIST_DIR)/$(EXTENSION_NAME)-$(EXTENSION_VERSION)-beta.zip' -Force"; \
|
||||
elif command -v powershell >/dev/null 2>&1; then \
|
||||
powershell -Command "Compress-Archive -Path '*' -DestinationPath '../../$(DIST_DIR)/$(EXTENSION_NAME)-$(EXTENSION_VERSION)-beta.zip' -Force"; \
|
||||
else \
|
||||
echo "$(COLOR_RED)✗ No zip tool found$(COLOR_RESET)"; \
|
||||
exit 1; \
|
||||
;; \
|
||||
*) \
|
||||
echo "$(COLOR_RED)✗ dev-install not supported for $(EXTENSION_TYPE)$(COLOR_RESET)"; \
|
||||
exit 1; \
|
||||
;; \
|
||||
esac; \
|
||||
\
|
||||
rm -rf "$$TARGET"; \
|
||||
ln -s "$(PWD)" "$$TARGET"; \
|
||||
echo "$(COLOR_GREEN)✓ Development symlink created at $$TARGET$(COLOR_RESET)"
|
||||
fi
|
||||
@echo "$(COLOR_GREEN)✓ Package: $(DIST_DIR)/$(EXTENSION_NAME)-$(EXTENSION_VERSION)-beta.zip$(COLOR_RESET)"
|
||||
|
||||
.PHONY: watch
|
||||
watch: ## Watch for changes and rebuild
|
||||
@echo "$(COLOR_BLUE)Watching for changes...$(COLOR_RESET)"
|
||||
@echo "$(COLOR_YELLOW)Press Ctrl+C to stop$(COLOR_RESET)"
|
||||
@while true; do \
|
||||
inotifywait -r -e modify,create,delete --exclude '($(BUILD_DIR)|$(DIST_DIR)|vendor|node_modules)' . 2>/dev/null || \
|
||||
(echo "$(COLOR_YELLOW)⚠ inotifywait not installed. Install: apt-get install inotify-tools$(COLOR_RESET)" && sleep 5); \
|
||||
make build; \
|
||||
.PHONY: checksum
|
||||
checksum: ## Generate SHA-256 checksums for dist packages
|
||||
@echo "$(COLOR_BLUE)Generating checksums...$(COLOR_RESET)"
|
||||
@for f in $(DIST_DIR)/*.zip; do \
|
||||
sha256sum "$$f" | tee "$${f}.sha256"; \
|
||||
done
|
||||
@echo "$(COLOR_GREEN)✓ Checksums generated$(COLOR_RESET)"
|
||||
|
||||
# ── Release ───────────────────────────────────────────────────────────────────
|
||||
|
||||
.PHONY: release
|
||||
release: validate build checksum ## Full release pipeline (validate + build + checksum)
|
||||
@echo "$(COLOR_GREEN)✓ Release package ready$(COLOR_RESET)"
|
||||
@echo ""
|
||||
@echo "$(COLOR_BLUE)Next steps:$(COLOR_RESET)"
|
||||
@echo " 1. Tag: git tag $(EXTENSION_VERSION)"
|
||||
@echo " 2. Push: git push origin --tags"
|
||||
@echo " 3. Create Gitea release and attach $(DIST_DIR)/$(EXTENSION_NAME)-$(EXTENSION_VERSION).zip"
|
||||
@echo ""
|
||||
|
||||
# ── Info ──────────────────────────────────────────────────────────────────────
|
||||
|
||||
.PHONY: version
|
||||
version: ## Display version information
|
||||
version: ## Display version and extension info
|
||||
@echo "$(COLOR_BLUE)Extension Information:$(COLOR_RESET)"
|
||||
@echo " Name: $(EXTENSION_NAME)"
|
||||
@echo " Type: $(EXTENSION_TYPE)"
|
||||
@echo " Version: $(EXTENSION_VERSION)"
|
||||
@if [ "$(EXTENSION_TYPE)" = "module" ]; then \
|
||||
echo " Module: $(MODULE_TYPE)"; \
|
||||
fi
|
||||
@if [ "$(EXTENSION_TYPE)" = "plugin" ]; then \
|
||||
echo " Group: $(PLUGIN_GROUP)"; \
|
||||
fi
|
||||
|
||||
.PHONY: docs
|
||||
docs: ## Generate documentation
|
||||
@echo "$(COLOR_BLUE)Generating documentation...$(COLOR_RESET)"
|
||||
@mkdir -p $(DOCS_DIR)
|
||||
@echo "$(COLOR_YELLOW)⚠ Documentation generation not configured$(COLOR_RESET)"
|
||||
@echo "Consider adding phpDocumentor or similar"
|
||||
|
||||
.PHONY: release
|
||||
release: validate test build ## Create a release (validate + test + build)
|
||||
@echo "$(COLOR_GREEN)✓ Release package ready$(COLOR_RESET)"
|
||||
@echo ""
|
||||
@echo "$(COLOR_BLUE)Release Checklist:$(COLOR_RESET)"
|
||||
@echo " [ ] Update CHANGELOG.md"
|
||||
@echo " [ ] Update version in XML manifest"
|
||||
@echo " [ ] Test installation in clean Joomla"
|
||||
@echo " [ ] Tag release in git: git tag v$(EXTENSION_VERSION)"
|
||||
@echo " [ ] Push tags: git push --tags"
|
||||
@echo " [ ] Create GitHub release"
|
||||
@echo ""
|
||||
@case "$(EXTENSION_TYPE)" in \
|
||||
module) PACKAGE="mod_$(EXTENSION_NAME)";; \
|
||||
plugin) PACKAGE="plg_$(PLUGIN_GROUP)_$(EXTENSION_NAME)";; \
|
||||
component) PACKAGE="com_$(EXTENSION_NAME)";; \
|
||||
package) PACKAGE="pkg_$(EXTENSION_NAME)";; \
|
||||
template) PACKAGE="tpl_$(EXTENSION_NAME)";; \
|
||||
esac; \
|
||||
echo "$(COLOR_GREEN)Package: $(DIST_DIR)/$${PACKAGE}-$(EXTENSION_VERSION).zip$(COLOR_RESET)"
|
||||
|
||||
.PHONY: security-check
|
||||
security-check: ## Run security checks on dependencies
|
||||
security-check: ## Run Composer security audit
|
||||
@echo "$(COLOR_BLUE)Running security checks...$(COLOR_RESET)"
|
||||
@if [ -f "composer.json" ]; then \
|
||||
$(COMPOSER) audit || echo "$(COLOR_YELLOW)⚠ Vulnerabilities found$(COLOR_RESET)"; \
|
||||
fi
|
||||
@if [ -f "package.json" ]; then \
|
||||
$(NPM) audit || echo "$(COLOR_YELLOW)⚠ Vulnerabilities found$(COLOR_RESET)"; \
|
||||
fi
|
||||
@$(COMPOSER) audit
|
||||
@echo "$(COLOR_GREEN)✓ Security check complete$(COLOR_RESET)"
|
||||
|
||||
.PHONY: all
|
||||
all: install-deps validate test build ## Run complete build pipeline
|
||||
all: install-deps validate build checksum ## Full pipeline: deps → validate → build → checksum
|
||||
@echo "$(COLOR_GREEN)✓ Complete build pipeline finished$(COLOR_RESET)"
|
||||
|
||||
# Default target
|
||||
.DEFAULT_GOAL := help
|
||||
|
||||
24
README.md
24
README.md
@@ -7,9 +7,9 @@
|
||||
# FILE INFORMATION
|
||||
DEFGROUP: Joomla.Template.Site
|
||||
INGROUP: MokoCassiopeia.Documentation
|
||||
REPO: https://github.com/mokoconsulting-tech/MokoCassiopeia
|
||||
REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoCassiopeia
|
||||
FILE: ./README.md
|
||||
VERSION: 03.09.13
|
||||
VERSION: 03.09.14
|
||||
BRIEF: Documentation for MokoCassiopeia template
|
||||
-->
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
|
||||
**A Modern, Lightweight Joomla Template Based on Cassiopeia**
|
||||
|
||||
[](https://github.com/mokoconsulting-tech/MokoCassiopeia/releases/tag/v03)
|
||||
[](https://git.mokoconsulting.tech/MokoConsulting/MokoCassiopeia/releases/tag/v03)
|
||||
[](LICENSE)
|
||||
[](https://www.joomla.org)
|
||||
[](https://www.php.net)
|
||||
@@ -101,7 +101,7 @@ MokoCassiopeia is a modern, lightweight enhancement layer built on top of Joomla
|
||||
|
||||
### Via Joomla Extension Manager
|
||||
|
||||
1. Download the latest `mokocassiopeia-{version}.zip` from [Releases](https://github.com/mokoconsulting-tech/MokoCassiopeia/releases)
|
||||
1. Download the latest `mokocassiopeia-{version}.zip` from [Releases](https://git.mokoconsulting.tech/MokoConsulting/MokoCassiopeia/releases)
|
||||
2. In Joomla admin, navigate to **System → Install → Extensions**
|
||||
3. Upload the ZIP file and click **Upload & Install**
|
||||
4. Navigate to **System → Site Templates**
|
||||
@@ -110,7 +110,7 @@ MokoCassiopeia is a modern, lightweight enhancement layer built on top of Joomla
|
||||
### Via Git (Development)
|
||||
|
||||
```bash
|
||||
git clone https://github.com/mokoconsulting-tech/MokoCassiopeia.git
|
||||
git clone https://git.mokoconsulting.tech/MokoConsulting/MokoCassiopeia.git
|
||||
cd MokoCassiopeia
|
||||
```
|
||||
|
||||
@@ -311,7 +311,7 @@ When enabled, the template adds:
|
||||
|
||||
```bash
|
||||
# Clone repository
|
||||
git clone https://github.com/mokoconsulting-tech/MokoCassiopeia.git
|
||||
git clone https://git.mokoconsulting.tech/MokoConsulting/MokoCassiopeia.git
|
||||
cd MokoCassiopeia
|
||||
|
||||
# Install development dependencies (if using Composer)
|
||||
@@ -371,8 +371,8 @@ See the [CHANGELOG.md](./CHANGELOG.md) for detailed version history.
|
||||
### Getting Help
|
||||
|
||||
- **Documentation**: Check this README and [docs folder](./docs/)
|
||||
- **Issues**: Report bugs via [GitHub Issues](https://github.com/mokoconsulting-tech/MokoCassiopeia/issues)
|
||||
- **Discussions**: Ask questions in [GitHub Discussions](https://github.com/mokoconsulting-tech/MokoCassiopeia/discussions)
|
||||
- **Issues**: Report bugs via [GitHub Issues](https://git.mokoconsulting.tech/MokoConsulting/MokoCassiopeia/issues)
|
||||
- **Discussions**: Ask questions in [GitHub Discussions](https://git.mokoconsulting.tech/MokoConsulting/MokoCassiopeia/discussions)
|
||||
- **Roadmap**: View planned features in [Roadmap](https://mokoconsulting.tech/support/joomla-cms/mokocassiopeia-roadmap)
|
||||
|
||||
### Reporting Bugs
|
||||
@@ -487,9 +487,9 @@ All third-party libraries and assets remain the property of their respective aut
|
||||
|
||||
## 🔗 Links
|
||||
|
||||
- **Repository**: [GitHub](https://github.com/mokoconsulting-tech/MokoCassiopeia)
|
||||
- **Issue Tracker**: [GitHub Issues](https://github.com/mokoconsulting-tech/MokoCassiopeia/issues)
|
||||
- **Discussions**: [GitHub Discussions](https://github.com/mokoconsulting-tech/MokoCassiopeia/discussions)
|
||||
- **Repository**: [GitHub](https://git.mokoconsulting.tech/MokoConsulting/MokoCassiopeia)
|
||||
- **Issue Tracker**: [GitHub Issues](https://git.mokoconsulting.tech/MokoConsulting/MokoCassiopeia/issues)
|
||||
- **Discussions**: [GitHub Discussions](https://git.mokoconsulting.tech/MokoConsulting/MokoCassiopeia/discussions)
|
||||
- **Roadmap**: [Full Roadmap](https://mokoconsulting.tech/support/joomla-cms/mokocassiopeia-roadmap)
|
||||
- **Moko Consulting**: [Website](https://mokoconsulting.tech)
|
||||
|
||||
@@ -499,7 +499,7 @@ All third-party libraries and assets remain the property of their respective aut
|
||||
|
||||
- **Maintainer**: Moko Consulting Engineering
|
||||
- **Author**: Jonathan Miller (@jmiller-moko)
|
||||
- **Repository**: https://github.com/mokoconsulting-tech/MokoCassiopeia
|
||||
- **Repository**: https://git.mokoconsulting.tech/MokoConsulting/MokoCassiopeia
|
||||
- **License**: GPL-3.0-or-later
|
||||
- **Classification**: Public Open Source Standards
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
# FILE INFORMATION
|
||||
DEFGROUP: Joomla.Template
|
||||
INGROUP: MokoCassiopeia.Governance
|
||||
REPO: https://github.com/mokoconsulting-tech/MokoCassiopeia
|
||||
REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoCassiopeia
|
||||
FILE: SECURITY.md
|
||||
VERSION: 03.09.03
|
||||
BRIEF: Security policy and vulnerability reporting process for MokoCassiopeia.
|
||||
@@ -169,7 +169,7 @@ If you want credit, include the name or handle to list in an advisory. If you pr
|
||||
## Metadata
|
||||
|
||||
* **Document:** SECURITY.md
|
||||
* **Repository:** [https://github.com/mokoconsulting-tech/MokoCassiopeia](https://github.com/mokoconsulting-tech/MokoCassiopeia)
|
||||
* **Repository:** [https://git.mokoconsulting.tech/MokoConsulting/MokoCassiopeia](https://git.mokoconsulting.tech/MokoConsulting/MokoCassiopeia)
|
||||
* **Path:** /SECURITY.md
|
||||
* **Owner:** Moko Consulting
|
||||
* **Version:** 03.06.00
|
||||
|
||||
@@ -1 +1,29 @@
|
||||
|
||||
{
|
||||
"name": "mokoconsulting/mokocassiopeia",
|
||||
"description": "MokoCassiopeia — Joomla site template based on Cassiopeia",
|
||||
"type": "joomla-template",
|
||||
"license": "GPL-3.0-or-later",
|
||||
"authors": [
|
||||
{
|
||||
"name": "Jonathan Miller",
|
||||
"email": "hello@mokoconsulting.tech"
|
||||
}
|
||||
],
|
||||
"require": {
|
||||
"php": ">=8.1"
|
||||
},
|
||||
"require-dev": {
|
||||
"mokoconsulting-tech/enterprise": "^4.0"
|
||||
},
|
||||
"config": {
|
||||
"sort-packages": true,
|
||||
"optimize-autoloader": true,
|
||||
"preferred-install": "dist"
|
||||
},
|
||||
"repositories": [
|
||||
{
|
||||
"type": "composer",
|
||||
"url": "https://git.mokoconsulting.tech/api/packages/MokoConsulting/composer"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
# FILE INFORMATION
|
||||
DEFGROUP: Joomla.Template.Site
|
||||
INGROUP: MokoCassiopeia.Documentation
|
||||
REPO: https://github.com/mokoconsulting-tech/MokoCassiopeia
|
||||
REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoCassiopeia
|
||||
FILE: docs/CSS_VARIABLES.md
|
||||
VERSION: 03.09.03
|
||||
BRIEF: Complete CSS variable reference for MokoCassiopeia template
|
||||
@@ -1443,7 +1443,7 @@ These ensure optimal readability for links within alert boxes.
|
||||
## Metadata
|
||||
|
||||
* Document: docs/CSS_VARIABLES.md
|
||||
* Repository: [https://github.com/mokoconsulting-tech/MokoCassiopeia](https://github.com/mokoconsulting-tech/MokoCassiopeia)
|
||||
* Repository: [https://git.mokoconsulting.tech/MokoConsulting/MokoCassiopeia](https://git.mokoconsulting.tech/MokoConsulting/MokoCassiopeia)
|
||||
* Path: /docs/CSS_VARIABLES.md
|
||||
* Owner: Moko Consulting
|
||||
* Version: 03.09.02
|
||||
|
||||
@@ -360,7 +360,7 @@ All scripts and workflows are licensed under GPL-3.0-or-later, same as the main
|
||||
## Metadata
|
||||
|
||||
* Document: docs/JOOMLA_DEVELOPMENT.md
|
||||
* Repository: [https://github.com/mokoconsulting-tech/MokoCassiopeia](https://github.com/mokoconsulting-tech/MokoCassiopeia)
|
||||
* Repository: [https://git.mokoconsulting.tech/MokoConsulting/MokoCassiopeia](https://git.mokoconsulting.tech/MokoConsulting/MokoCassiopeia)
|
||||
* Path: /docs/JOOMLA_DEVELOPMENT.md
|
||||
* Owner: Moko Consulting
|
||||
* Version: 03.06.03
|
||||
|
||||
@@ -12,7 +12,7 @@ This guide explains how to manually deploy the MokoCassiopeia template from the
|
||||
|
||||
## Overview
|
||||
|
||||
**Important**: The `src` directory in this repository is the development source, not a ready-to-install package. For production use, we recommend using the packaged ZIP file from [Releases](https://github.com/mokoconsulting-tech/MokoCassiopeia/releases).
|
||||
**Important**: The `src` directory in this repository is the development source, not a ready-to-install package. For production use, we recommend using the packaged ZIP file from [Releases](https://git.mokoconsulting.tech/MokoConsulting/MokoCassiopeia/releases).
|
||||
|
||||
However, for development or testing purposes, you can manually deploy files from the `src` directory to your Joomla installation.
|
||||
|
||||
@@ -300,7 +300,7 @@ If you encounter issues with manual deployment:
|
||||
|
||||
1. Check this troubleshooting guide first
|
||||
2. Review [Joomla's template documentation](https://docs.joomla.org/J4.x:Creating_a_Simple_Template)
|
||||
3. Open an issue on [GitHub](https://github.com/mokoconsulting-tech/MokoCassiopeia/issues)
|
||||
3. Open an issue on [GitHub](https://git.mokoconsulting.tech/MokoConsulting/MokoCassiopeia/issues)
|
||||
4. Contact: hello@mokoconsulting.tech
|
||||
|
||||
---
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
# FILE INFORMATION
|
||||
DEFGROUP: Joomla.Template.Site
|
||||
INGROUP: MokoCassiopeia.Documentation
|
||||
REPO: https://github.com/mokoconsulting-tech/MokoCassiopeia
|
||||
REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoCassiopeia
|
||||
FILE: docs/MODULE_OVERRIDES.md
|
||||
VERSION: 03.09.03
|
||||
BRIEF: Comprehensive guide to MokoCassiopeia mobile-responsive module overrides
|
||||
@@ -647,7 +647,7 @@ Override CSS variables in your custom color scheme:
|
||||
### Getting Help
|
||||
|
||||
- **Documentation**: Check module-specific README files
|
||||
- **GitHub Issues**: [Report issues](https://github.com/mokoconsulting-tech/MokoCassiopeia/issues)
|
||||
- **GitHub Issues**: [Report issues](https://git.mokoconsulting.tech/MokoConsulting/MokoCassiopeia/issues)
|
||||
- **Support**: hello@mokoconsulting.tech
|
||||
|
||||
---
|
||||
@@ -703,14 +703,14 @@ In your template's `index.php`, specify layout for entire module position:
|
||||
- **Main README**: [README.md](../README.md)
|
||||
- **Changelog**: [CHANGELOG.md](../CHANGELOG.md)
|
||||
- **CSS Variables**: [CSS_VARIABLES.md](CSS_VARIABLES.md)
|
||||
- **Repository**: [GitHub](https://github.com/mokoconsulting-tech/MokoCassiopeia)
|
||||
- **Repository**: [GitHub](https://git.mokoconsulting.tech/MokoConsulting/MokoCassiopeia)
|
||||
|
||||
---
|
||||
|
||||
## Metadata
|
||||
|
||||
* Document: docs/MODULE_OVERRIDES.md
|
||||
* Repository: [https://github.com/mokoconsulting-tech/MokoCassiopeia](https://github.com/mokoconsulting-tech/MokoCassiopeia)
|
||||
* Repository: [https://git.mokoconsulting.tech/MokoConsulting/MokoCassiopeia](https://git.mokoconsulting.tech/MokoConsulting/MokoCassiopeia)
|
||||
* Path: /docs/MODULE_OVERRIDES.md
|
||||
* Owner: Moko Consulting
|
||||
* Version: 03.07.00
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
# FILE INFORMATION
|
||||
DEFGROUP: Joomla.Template.Site
|
||||
INGROUP: MokoCassiopeia.Documentation
|
||||
REPO: https://github.com/mokoconsulting-tech/MokoCassiopeia
|
||||
REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoCassiopeia
|
||||
FILE: docs/OVERRIDE_PHILOSOPHY.md
|
||||
VERSION: 03.09.03
|
||||
BRIEF: Philosophy and implementation of non-replacing alternative layouts
|
||||
|
||||
@@ -17,7 +17,7 @@ Before you begin, ensure you have:
|
||||
### 1. Clone the Repository
|
||||
|
||||
```bash
|
||||
git clone https://github.com/mokoconsulting-tech/MokoCassiopeia.git
|
||||
git clone https://git.mokoconsulting.tech/MokoConsulting/MokoCassiopeia.git
|
||||
cd MokoCassiopeia
|
||||
```
|
||||
|
||||
@@ -317,7 +317,7 @@ make help # Show all commands
|
||||
## Metadata
|
||||
|
||||
* Document: docs/QUICK_START.md
|
||||
* Repository: [https://github.com/mokoconsulting-tech/MokoCassiopeia](https://github.com/mokoconsulting-tech/MokoCassiopeia)
|
||||
* Repository: [https://git.mokoconsulting.tech/MokoConsulting/MokoCassiopeia](https://git.mokoconsulting.tech/MokoConsulting/MokoCassiopeia)
|
||||
* Path: /docs/QUICK_START.md
|
||||
* Owner: Moko Consulting
|
||||
* Version: 03.06.03
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
# FILE INFORMATION
|
||||
DEFGROUP: Joomla.Template.Site
|
||||
INGROUP: MokoCassiopeia.Documentation
|
||||
REPO: https://github.com/mokoconsulting-tech/MokoCassiopeia
|
||||
REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoCassiopeia
|
||||
FILE: docs/README.md
|
||||
VERSION: 03.09.03
|
||||
BRIEF: Documentation index for MokoCassiopeia template
|
||||
@@ -145,7 +145,7 @@ Before contributing, please read:
|
||||
|
||||
## Standards Compliance
|
||||
|
||||
This project adheres to [MokoStandards](https://github.com/mokoconsulting-tech/MokoStandards) for:
|
||||
This project adheres to [MokoStandards](https://git.mokoconsulting.tech/MokoConsulting/MokoStandards) for:
|
||||
|
||||
* Coding standards and formatting
|
||||
* Documentation requirements
|
||||
@@ -155,8 +155,8 @@ This project adheres to [MokoStandards](https://github.com/mokoconsulting-tech/M
|
||||
|
||||
## Additional Resources
|
||||
|
||||
* **Repository**: [https://github.com/mokoconsulting-tech/MokoCassiopeia](https://github.com/mokoconsulting-tech/MokoCassiopeia)
|
||||
* **Issue Tracker**: [GitHub Issues](https://github.com/mokoconsulting-tech/MokoCassiopeia/issues)
|
||||
* **Repository**: [https://git.mokoconsulting.tech/MokoConsulting/MokoCassiopeia](https://git.mokoconsulting.tech/MokoConsulting/MokoCassiopeia)
|
||||
* **Issue Tracker**: [GitHub Issues](https://git.mokoconsulting.tech/MokoConsulting/MokoCassiopeia/issues)
|
||||
* **Changelog**: [CHANGELOG.md](../CHANGELOG.md)
|
||||
* **License**: [GPL-3.0-or-later](../LICENSE)
|
||||
|
||||
@@ -170,7 +170,7 @@ This project adheres to [MokoStandards](https://github.com/mokoconsulting-tech/M
|
||||
## Metadata
|
||||
|
||||
* Document: docs/README.md
|
||||
* Repository: [https://github.com/mokoconsulting-tech/MokoCassiopeia](https://github.com/mokoconsulting-tech/MokoCassiopeia)
|
||||
* Repository: [https://git.mokoconsulting.tech/MokoConsulting/MokoCassiopeia](https://git.mokoconsulting.tech/MokoConsulting/MokoCassiopeia)
|
||||
* Path: /docs/README.md
|
||||
* Owner: Moko Consulting
|
||||
* Version: 03.07.00
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
# FILE INFORMATION
|
||||
DEFGROUP: Joomla.Template.Site
|
||||
INGROUP: MokoCassiopeia.Documentation
|
||||
REPO: https://github.com/mokoconsulting-tech/MokoCassiopeia
|
||||
REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoCassiopeia
|
||||
FILE: docs/RELEASE_PROCESS.md
|
||||
VERSION: 03.09.03
|
||||
BRIEF: Complete release process documentation for MokoCassiopeia
|
||||
@@ -282,7 +282,7 @@ cat build/mokocassiopeia-src-03.08.04.zip.sha256
|
||||
# Edit updates.xml
|
||||
# Update <version>03.08.04</version>
|
||||
# Update <creationDate>2026-02-27</creationDate>
|
||||
# Update <downloadurl>https://github.com/mokoconsulting-tech/MokoCassiopeia/releases/download/03.08.04/mokocassiopeia-src-03.08.04.zip</downloadurl>
|
||||
# Update <downloadurl>https://git.mokoconsulting.tech/MokoConsulting/MokoCassiopeia/releases/download/03.08.04/mokocassiopeia-src-03.08.04.zip</downloadurl>
|
||||
# Update <sha256>sha256:a1b2c3d4e5f6...</sha256>
|
||||
|
||||
# Commit and push
|
||||
@@ -312,10 +312,10 @@ git push
|
||||
<authorEmail>hello@mokoconsulting.tech</authorEmail>
|
||||
<copyright>(C)GNU General Public License Version 3 - 2026 Moko Consulting</copyright>
|
||||
|
||||
<infourl title='MokoCassiopeia'>https://github.com/mokoconsulting-tech/MokoCassiopeia</infourl>
|
||||
<infourl title='MokoCassiopeia'>https://git.mokoconsulting.tech/MokoConsulting/MokoCassiopeia</infourl>
|
||||
|
||||
<downloads>
|
||||
<downloadurl type='full' format='zip'>https://github.com/mokoconsulting-tech/MokoCassiopeia/releases/download/03.08.04/mokocassiopeia-src-03.08.04.zip</downloadurl>
|
||||
<downloadurl type='full' format='zip'>https://git.mokoconsulting.tech/MokoConsulting/MokoCassiopeia/releases/download/03.08.04/mokocassiopeia-src-03.08.04.zip</downloadurl>
|
||||
<sha256>sha256:a1b2c3d4e5f6...</sha256>
|
||||
</downloads>
|
||||
|
||||
@@ -625,8 +625,8 @@ git push
|
||||
|
||||
## Support
|
||||
|
||||
- **Issues**: [GitHub Issues](https://github.com/mokoconsulting-tech/MokoCassiopeia/issues)
|
||||
- **Discussions**: [GitHub Discussions](https://github.com/mokoconsulting-tech/MokoCassiopeia/discussions)
|
||||
- **Issues**: [GitHub Issues](https://git.mokoconsulting.tech/MokoConsulting/MokoCassiopeia/issues)
|
||||
- **Discussions**: [GitHub Discussions](https://git.mokoconsulting.tech/MokoConsulting/MokoCassiopeia/discussions)
|
||||
- **Email**: hello@mokoconsulting.tech
|
||||
|
||||
---
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
# FILE INFORMATION
|
||||
DEFGROUP: Joomla.Template.Site
|
||||
INGROUP: MokoCassiopeia.Documentation
|
||||
REPO: https://github.com/mokoconsulting-tech/moko-cassiopeia
|
||||
REPO: https://git.mokoconsulting.tech/MokoConsulting/moko-cassiopeia
|
||||
FILE: docs/ROADMAP.md
|
||||
VERSION: 03.09.03
|
||||
BRIEF: Version-specific roadmap for MokoCassiopeia template
|
||||
@@ -860,8 +860,8 @@ MokoCassiopeia aims to be the **most developer-friendly, user-customizable, and
|
||||
|
||||
### Official Links
|
||||
- **Full Roadmap**: [https://mokoconsulting.tech/support/joomla-cms/mokocassiopeia-roadmap](https://mokoconsulting.tech/support/joomla-cms/mokocassiopeia-roadmap)
|
||||
- **Repository**: [https://github.com/mokoconsulting-tech/moko-cassiopeia](https://github.com/mokoconsulting-tech/moko-cassiopeia)
|
||||
- **Issue Tracker**: [GitHub Issues](https://github.com/mokoconsulting-tech/moko-cassiopeia/issues)
|
||||
- **Repository**: [https://git.mokoconsulting.tech/MokoConsulting/moko-cassiopeia](https://git.mokoconsulting.tech/MokoConsulting/moko-cassiopeia)
|
||||
- **Issue Tracker**: [GitHub Issues](https://git.mokoconsulting.tech/MokoConsulting/moko-cassiopeia/issues)
|
||||
- **Changelog**: [CHANGELOG.md](../CHANGELOG.md)
|
||||
|
||||
### Community
|
||||
@@ -882,7 +882,7 @@ MokoCassiopeia aims to be the **most developer-friendly, user-customizable, and
|
||||
Have ideas for future features? We welcome community input!
|
||||
|
||||
**How to Suggest Features**:
|
||||
1. Check the [GitHub Issues](https://github.com/mokoconsulting-tech/moko-cassiopeia/issues) for existing requests
|
||||
1. Check the [GitHub Issues](https://git.mokoconsulting.tech/MokoConsulting/moko-cassiopeia/issues) for existing requests
|
||||
2. Open a new issue with the `enhancement` label
|
||||
3. Provide clear use cases and benefits
|
||||
4. Engage in community discussion
|
||||
@@ -900,7 +900,7 @@ Have ideas for future features? We welcome community input!
|
||||
## Metadata
|
||||
|
||||
* Document: docs/ROADMAP.md
|
||||
* Repository: [https://github.com/mokoconsulting-tech/MokoCassiopeia](https://github.com/mokoconsulting-tech/MokoCassiopeia)
|
||||
* Repository: [https://git.mokoconsulting.tech/MokoConsulting/MokoCassiopeia](https://git.mokoconsulting.tech/MokoConsulting/MokoCassiopeia)
|
||||
* Path: /docs/ROADMAP.md
|
||||
* Owner: Moko Consulting
|
||||
* Version: 03.06.03
|
||||
|
||||
@@ -443,7 +443,7 @@ phpcs --standard=phpcs.xml --report=source src/
|
||||
## Metadata
|
||||
|
||||
* Document: docs/WORKFLOW_GUIDE.md
|
||||
* Repository: [https://github.com/mokoconsulting-tech/MokoCassiopeia](https://github.com/mokoconsulting-tech/MokoCassiopeia)
|
||||
* Repository: [https://git.mokoconsulting.tech/MokoConsulting/MokoCassiopeia](https://git.mokoconsulting.tech/MokoConsulting/MokoCassiopeia)
|
||||
* Path: /docs/WORKFLOW_GUIDE.md
|
||||
* Owner: Moko Consulting
|
||||
* Version: 03.06.03
|
||||
|
||||
@@ -12,12 +12,12 @@
|
||||
"spdx_license": "GPL-3.0-or-later",
|
||||
"notice": "This file is part of a Moko Consulting project.",
|
||||
"disclaimer": "This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License; either version 3 of the License, or (at your option) any later version. 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. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see https://www.gnu.org/licenses/.",
|
||||
"repo": "https://github.com/mokoconsulting-tech/MokoCassiopeia",
|
||||
"repo": "https://git.mokoconsulting.tech/MokoConsulting/MokoCassiopeia",
|
||||
"file_information": {
|
||||
"defgroup": "Joomla.Template.Site",
|
||||
"ingroup": "MokoCassiopeia.Template.Assets",
|
||||
"path": "./media/templates/site/mokocassiopeia/joomla.asset.json",
|
||||
"version": "03.09.02",
|
||||
"version": "03.09.14",
|
||||
"brief": "Joomla asset registry for MokoCassiopeia"
|
||||
}
|
||||
},
|
||||
@@ -124,6 +124,12 @@
|
||||
"uri": "media/templates/site/mokocassiopeia/css/theme/dark.custom.min.css",
|
||||
"attributes": {"media": "all"}
|
||||
},
|
||||
{
|
||||
"name": "template.a11y-high-contrast",
|
||||
"type": "style",
|
||||
"uri": "media/templates/site/mokocassiopeia/css/a11y-high-contrast.css",
|
||||
"attributes": {"media": "all"}
|
||||
},
|
||||
{
|
||||
"name": "template.js",
|
||||
"type": "script",
|
||||
|
||||
227
src/media/css/a11y-high-contrast.css
Normal file
227
src/media/css/a11y-high-contrast.css
Normal file
@@ -0,0 +1,227 @@
|
||||
@charset "UTF-8";
|
||||
/* Copyright (C) 2026 Moko Consulting <hello@mokoconsulting.tech>
|
||||
*
|
||||
* This file is part of a Moko Consulting project.
|
||||
*
|
||||
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||
*
|
||||
* FILE INFORMATION
|
||||
* DEFGROUP: Joomla.Template.Site
|
||||
* INGROUP: MokoCassiopeia.Accessibility
|
||||
* REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoCassiopeia
|
||||
* PATH: ./media/css/a11y-high-contrast.css
|
||||
* VERSION: 03.09.14
|
||||
* BRIEF: High-contrast stylesheet for accessibility toolbar
|
||||
*/
|
||||
|
||||
/* ===================================================================
|
||||
* HIGH CONTRAST MODE
|
||||
* Applied when .a11y-high-contrast is on <html>.
|
||||
* Overrides theme variables to maximise contrast ratios (WCAG AAA).
|
||||
* =================================================================== */
|
||||
|
||||
/* ── Light mode high contrast ─────────────────────────────────────── */
|
||||
:root[data-bs-theme="light"].a11y-high-contrast {
|
||||
--body-color: #000;
|
||||
--body-color-rgb: 0, 0, 0;
|
||||
--body-bg: #fff;
|
||||
--body-bg-rgb: 255, 255, 255;
|
||||
--heading-color: #000;
|
||||
--emphasis-color: #000;
|
||||
--secondary-color: #000000bf;
|
||||
--tertiary-color: #00000080;
|
||||
--muted-color: #333;
|
||||
|
||||
/* Links — strong blue on white */
|
||||
--color-link: #0000ee;
|
||||
--link-color: #0000ee;
|
||||
--link-color-rgb: 0, 0, 238;
|
||||
--color-hover: #cc0000;
|
||||
--link-hover-color: #cc0000;
|
||||
--link-hover-color-rgb: 204, 0, 0;
|
||||
|
||||
/* Borders — visible on all backgrounds */
|
||||
--border-color: #000;
|
||||
--border-color-soft: #333;
|
||||
|
||||
/* Backgrounds */
|
||||
--secondary-bg: #e0e0e0;
|
||||
--secondary-bg-rgb: 224, 224, 224;
|
||||
--tertiary-bg: #f0f0f0;
|
||||
--tertiary-bg-rgb: 240, 240, 240;
|
||||
|
||||
/* Navigation */
|
||||
--nav-bg-color: #000;
|
||||
--nav-text-color: #fff;
|
||||
--mainmenu-nav-link-color: #fff;
|
||||
|
||||
/* Buttons */
|
||||
--btn-color: #fff;
|
||||
--btn-bg: #000;
|
||||
--btn-border-color: #000;
|
||||
--btn-hover-color: #000;
|
||||
--btn-hover-bg: #ffff00;
|
||||
--btn-hover-border-color: #000;
|
||||
--btn-active-color: #000;
|
||||
--btn-active-bg: #ffff00;
|
||||
--btn-active-border-color: #000;
|
||||
|
||||
/* Forms */
|
||||
--input-color: #000;
|
||||
--input-bg: #fff;
|
||||
--input-border-color: #000;
|
||||
--input-focus-color: #000;
|
||||
--input-focus-bg: #ffffcc;
|
||||
--input-focus-border-color: #0000ee;
|
||||
--input-placeholder-color: #555;
|
||||
|
||||
/* Cards */
|
||||
--card-border-color: #000;
|
||||
--card-bg: #fff;
|
||||
--card-cap-bg: #e0e0e0;
|
||||
|
||||
/* Tables */
|
||||
--table-color: #000;
|
||||
--table-bg: #fff;
|
||||
--table-border-color: #000;
|
||||
--table-striped-bg: #f0f0f0;
|
||||
--table-hover-bg: #ffff99;
|
||||
|
||||
/* Alerts */
|
||||
--alert-border-width: 2px;
|
||||
|
||||
/* Code */
|
||||
--code-color: #000;
|
||||
--code-bg-color: #ffffcc;
|
||||
|
||||
/* Selection */
|
||||
--selection-bg: #0000ee;
|
||||
--selection-ink: #fff;
|
||||
|
||||
/* Focus indicator — always visible */
|
||||
--focus-ring-color: #0000ee;
|
||||
--focus-ring-width: 3px;
|
||||
}
|
||||
|
||||
/* ── Dark mode high contrast ──────────────────────────────────────── */
|
||||
:root[data-bs-theme="dark"].a11y-high-contrast {
|
||||
--body-color: #fff;
|
||||
--body-color-rgb: 255, 255, 255;
|
||||
--body-bg: #000;
|
||||
--body-bg-rgb: 0, 0, 0;
|
||||
--heading-color: #fff;
|
||||
--emphasis-color: #fff;
|
||||
--secondary-color: #ffffffbf;
|
||||
--tertiary-color: #ffffff80;
|
||||
--muted-color: #ccc;
|
||||
|
||||
/* Links — bright yellow on black */
|
||||
--color-link: #ffff00;
|
||||
--link-color: #ffff00;
|
||||
--link-color-rgb: 255, 255, 0;
|
||||
--color-hover: #00ffff;
|
||||
--link-hover-color: #00ffff;
|
||||
--link-hover-color-rgb: 0, 255, 255;
|
||||
|
||||
/* Borders */
|
||||
--border-color: #fff;
|
||||
--border-color-soft: #ccc;
|
||||
|
||||
/* Backgrounds */
|
||||
--secondary-bg: #1a1a1a;
|
||||
--secondary-bg-rgb: 26, 26, 26;
|
||||
--tertiary-bg: #111;
|
||||
--tertiary-bg-rgb: 17, 17, 17;
|
||||
|
||||
/* Navigation */
|
||||
--nav-bg-color: #000;
|
||||
--nav-text-color: #fff;
|
||||
--mainmenu-nav-link-color: #ffff00;
|
||||
|
||||
/* Buttons */
|
||||
--btn-color: #000;
|
||||
--btn-bg: #ffff00;
|
||||
--btn-border-color: #ffff00;
|
||||
--btn-hover-color: #000;
|
||||
--btn-hover-bg: #00ffff;
|
||||
--btn-hover-border-color: #00ffff;
|
||||
--btn-active-color: #000;
|
||||
--btn-active-bg: #00ffff;
|
||||
--btn-active-border-color: #00ffff;
|
||||
|
||||
/* Forms */
|
||||
--input-color: #fff;
|
||||
--input-bg: #000;
|
||||
--input-border-color: #fff;
|
||||
--input-focus-color: #fff;
|
||||
--input-focus-bg: #1a1a1a;
|
||||
--input-focus-border-color: #ffff00;
|
||||
--input-placeholder-color: #aaa;
|
||||
|
||||
/* Cards */
|
||||
--card-border-color: #fff;
|
||||
--card-bg: #000;
|
||||
--card-cap-bg: #1a1a1a;
|
||||
|
||||
/* Tables */
|
||||
--table-color: #fff;
|
||||
--table-bg: #000;
|
||||
--table-border-color: #fff;
|
||||
--table-striped-bg: #111;
|
||||
--table-hover-bg: #333;
|
||||
|
||||
/* Alerts */
|
||||
--alert-border-width: 2px;
|
||||
|
||||
/* Code */
|
||||
--code-color: #00ff00;
|
||||
--code-bg-color: #1a1a1a;
|
||||
|
||||
/* Selection */
|
||||
--selection-bg: #ffff00;
|
||||
--selection-ink: #000;
|
||||
|
||||
/* Focus indicator */
|
||||
--focus-ring-color: #ffff00;
|
||||
--focus-ring-width: 3px;
|
||||
}
|
||||
|
||||
/* ── Shared high-contrast overrides (both modes) ──────────────────── */
|
||||
.a11y-high-contrast * {
|
||||
border-color: var(--border-color) !important;
|
||||
}
|
||||
|
||||
.a11y-high-contrast *:focus-visible {
|
||||
outline: var(--focus-ring-width, 3px) solid var(--focus-ring-color, #0000ee) !important;
|
||||
outline-offset: 2px !important;
|
||||
}
|
||||
|
||||
.a11y-high-contrast img {
|
||||
outline: 2px solid var(--border-color);
|
||||
}
|
||||
|
||||
.a11y-high-contrast a {
|
||||
text-decoration: underline !important;
|
||||
text-decoration-thickness: 2px !important;
|
||||
}
|
||||
|
||||
.a11y-high-contrast button,
|
||||
.a11y-high-contrast .btn,
|
||||
.a11y-high-contrast input,
|
||||
.a11y-high-contrast select,
|
||||
.a11y-high-contrast textarea {
|
||||
border-width: 2px !important;
|
||||
border-style: solid !important;
|
||||
}
|
||||
|
||||
.a11y-high-contrast .badge,
|
||||
.a11y-high-contrast .alert {
|
||||
border: 2px solid var(--border-color) !important;
|
||||
}
|
||||
|
||||
/* Ensure disabled states are still distinguishable */
|
||||
.a11y-high-contrast [disabled],
|
||||
.a11y-high-contrast .disabled {
|
||||
opacity: .5 !important;
|
||||
text-decoration: line-through !important;
|
||||
}
|
||||
@@ -13780,14 +13780,6 @@ meter {
|
||||
margin-left: auto;
|
||||
}
|
||||
|
||||
.page-link {
|
||||
color: var(--color-link, white);
|
||||
}
|
||||
|
||||
.page-link:active {
|
||||
color: var(--color-link, white);
|
||||
}
|
||||
|
||||
.pager .pagination {
|
||||
-webkit-box-pack: center;
|
||||
-ms-flex-pack: center;
|
||||
@@ -13987,10 +13979,9 @@ meter {
|
||||
}
|
||||
|
||||
.footer {
|
||||
padding-top: 1rem;
|
||||
color: var(--body-bg, #e6ebf1);
|
||||
color: var(--mainmenu-nav-link-color, #fff);
|
||||
background-color: var(--nav-bg-color);
|
||||
padding-bottom: 80px;
|
||||
padding-bottom: var(--footer-padding-bottom, 80px);
|
||||
}
|
||||
|
||||
.footer .grid-child {
|
||||
@@ -14002,7 +13993,6 @@ meter {
|
||||
-ms-flex-direction: column;
|
||||
flex-direction: column;
|
||||
width: 100%;
|
||||
padding: 2.5rem 0.5em;
|
||||
}
|
||||
|
||||
.footer a {
|
||||
@@ -14248,8 +14238,8 @@ fieldset>* {
|
||||
.container-header .navbar-brand {
|
||||
position: relative;
|
||||
display: inline-block;
|
||||
padding-top: 0.3125rem;
|
||||
padding-bottom: 0.3125rem;
|
||||
padding-top: var(--navbar-brand-padding-y, 0.3125rem);
|
||||
padding-bottom: var(--navbar-brand-padding-y, 0.3125rem);
|
||||
font-size: 2rem;
|
||||
color: var(--nav-text-color, gray);
|
||||
-webkit-margin-end: auto;
|
||||
@@ -15781,7 +15771,7 @@ body.wrapper-fluid header>.grid-child {
|
||||
}
|
||||
|
||||
footer .grid-child>div {
|
||||
padding: 1rem 0 0;
|
||||
padding: var(--navbar-padding-y, 1rem) var(--navbar-padding-x, 1rem) 0;
|
||||
}
|
||||
|
||||
header .grid-child .navbar-brand {
|
||||
@@ -17080,8 +17070,8 @@ form .form-select {
|
||||
background: var(--muted-color, #6d757e);
|
||||
box-shadow: var(--box-shadow, 0 .5rem 1rem #00000066);
|
||||
font: inherit;
|
||||
color: var(--body-bg, #0e1318);
|
||||
font-weight: 600px;
|
||||
color: #fff;
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
#mokoThemeFab.pos-br {
|
||||
@@ -17143,10 +17133,112 @@ button#mokoThemeSwitch {
|
||||
#mokoThemeFab .label {
|
||||
user-select: none;
|
||||
font-size: .875rem;
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
#mokoThemeFab button {
|
||||
color: var(--body-bg, #0e1318);
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
/* Auto toggle switch (on/off style) */
|
||||
.auto-toggle-wrap {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: .35rem;
|
||||
}
|
||||
|
||||
.auto-label {
|
||||
font-size: .75rem;
|
||||
font-weight: 600;
|
||||
text-transform: uppercase;
|
||||
letter-spacing: .04em;
|
||||
opacity: .7;
|
||||
user-select: none;
|
||||
}
|
||||
|
||||
.auto-switch {
|
||||
position: relative;
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
width: 32px;
|
||||
height: 18px;
|
||||
border: none;
|
||||
border-radius: 999px;
|
||||
background: var(--secondary-color, #6c757d);
|
||||
cursor: pointer;
|
||||
padding: 0;
|
||||
transition: background .2s;
|
||||
}
|
||||
|
||||
.auto-switch.on {
|
||||
background: var(--link-color, #3565e5);
|
||||
}
|
||||
|
||||
.auto-track {
|
||||
position: relative;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
.auto-knob {
|
||||
position: absolute;
|
||||
top: 2px;
|
||||
left: 2px;
|
||||
width: 14px;
|
||||
height: 14px;
|
||||
border-radius: 50%;
|
||||
background: #fff;
|
||||
box-shadow: 0 1px 3px rgba(0,0,0,.3);
|
||||
transition: transform .2s ease;
|
||||
}
|
||||
|
||||
.auto-switch.on .auto-knob {
|
||||
transform: translateX(14px);
|
||||
}
|
||||
|
||||
/* FAB divider between theme controls and a11y */
|
||||
.fab-divider {
|
||||
display: block;
|
||||
width: 1px;
|
||||
height: 24px;
|
||||
background: currentColor;
|
||||
opacity: .25;
|
||||
margin: 0 .15rem;
|
||||
}
|
||||
|
||||
/* Inline a11y toggle inside theme FAB */
|
||||
.a11y-toggle-inline {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
width: 28px;
|
||||
height: 28px;
|
||||
border-radius: 50%;
|
||||
border: 1.5px solid currentColor;
|
||||
background: transparent;
|
||||
color: inherit;
|
||||
font-size: 1rem;
|
||||
cursor: pointer;
|
||||
padding: 0;
|
||||
transition: background .2s, color .2s;
|
||||
opacity: .8;
|
||||
}
|
||||
|
||||
.a11y-toggle-inline:hover,
|
||||
.a11y-toggle-inline:focus-visible {
|
||||
opacity: 1;
|
||||
background: rgba(255,255,255,.15);
|
||||
}
|
||||
|
||||
.a11y-toggle-inline.active {
|
||||
opacity: 1;
|
||||
background: rgba(255,255,255,.25);
|
||||
}
|
||||
|
||||
/* Floating a11y panel when inline */
|
||||
.a11y-toolbar-floating {
|
||||
position: fixed;
|
||||
z-index: 1202;
|
||||
}
|
||||
|
||||
body.site.error-page {
|
||||
@@ -17372,11 +17464,9 @@ html.a11y-pause-animations *::after {
|
||||
right: 2.5rem;
|
||||
}
|
||||
|
||||
/* When theme FAB is present, sit a11y toolbar to its left */
|
||||
/* When theme FAB is present, a11y toggle is inline — hide standalone toolbar positioning */
|
||||
body[data-theme-fab-enabled="1"] #mokoA11yToolbar {
|
||||
right: auto;
|
||||
left: 2.5rem;
|
||||
bottom: 1rem;
|
||||
position: static;
|
||||
}
|
||||
|
||||
/* Toggle button */
|
||||
|
||||
@@ -817,6 +817,12 @@ color-scheme: dark;
|
||||
--table-active-color: var(--body-color);
|
||||
--table-active-bg: rgba(var(--white-rgb), 0.1);
|
||||
|
||||
/* ===== FOOTER ===== */
|
||||
--footer-padding-top: 1rem;
|
||||
--footer-padding-bottom: 80px;
|
||||
--footer-grid-padding-y: 2.5rem;
|
||||
--footer-grid-padding-x: 0.5em;
|
||||
|
||||
/* ===== BACKDROP ===== */
|
||||
--backdrop-zindex: 1040;
|
||||
--backdrop-bg: hsl(0, 0%, 0%);
|
||||
|
||||
@@ -817,6 +817,12 @@ color-scheme: dark;
|
||||
--table-active-color: var(--body-color);
|
||||
--table-active-bg: rgba(var(--white-rgb), 0.1);
|
||||
|
||||
/* ===== FOOTER ===== */
|
||||
--footer-padding-top: 1rem;
|
||||
--footer-padding-bottom: 80px;
|
||||
--footer-grid-padding-y: 2.5rem;
|
||||
--footer-grid-padding-x: 0.5em;
|
||||
|
||||
/* ===== BACKDROP ===== */
|
||||
--backdrop-zindex: 1040;
|
||||
--backdrop-bg: hsl(0, 0%, 0%);
|
||||
|
||||
@@ -816,6 +816,12 @@ color-scheme: light;
|
||||
--table-active-color: var(--body-color);
|
||||
--table-active-bg: rgba(var(--black-rgb), 0.075);
|
||||
|
||||
/* ===== FOOTER ===== */
|
||||
--footer-padding-top: 1rem;
|
||||
--footer-padding-bottom: 80px;
|
||||
--footer-grid-padding-y: 2.5rem;
|
||||
--footer-grid-padding-x: 0.5em;
|
||||
|
||||
/* ===== BACKDROP ===== */
|
||||
--backdrop-zindex: 1040;
|
||||
--backdrop-bg: hsl(0, 0%, 0%);
|
||||
|
||||
@@ -816,6 +816,12 @@ color-scheme: light;
|
||||
--table-active-color: var(--body-color);
|
||||
--table-active-bg: rgba(var(--black-rgb), 0.075);
|
||||
|
||||
/* ===== FOOTER ===== */
|
||||
--footer-padding-top: 1rem;
|
||||
--footer-padding-bottom: 80px;
|
||||
--footer-grid-padding-y: 2.5rem;
|
||||
--footer-grid-padding-x: 0.5em;
|
||||
|
||||
/* ===== BACKDROP ===== */
|
||||
--backdrop-zindex: 1040;
|
||||
--backdrop-bg: hsl(0, 0%, 0%);
|
||||
|
||||
@@ -87,13 +87,40 @@
|
||||
lblD.className = 'label';
|
||||
lblD.textContent = 'Dark';
|
||||
|
||||
// Auto button
|
||||
// Auto toggle (on/off switch style)
|
||||
var autoWrap = doc.createElement('div');
|
||||
autoWrap.className = 'auto-toggle-wrap';
|
||||
|
||||
var autoLabel = doc.createElement('span');
|
||||
autoLabel.className = 'auto-label';
|
||||
autoLabel.textContent = 'Auto';
|
||||
|
||||
var auto = doc.createElement('button');
|
||||
auto.id = 'mokoThemeAuto';
|
||||
auto.type = 'button';
|
||||
auto.className = 'btn btn-sm btn-link text-decoration-none px-2';
|
||||
auto.setAttribute('aria-label', 'Follow system theme');
|
||||
auto.textContent = 'Auto';
|
||||
auto.className = 'auto-switch';
|
||||
auto.setAttribute('role', 'switch');
|
||||
auto.setAttribute('aria-label', 'Automatic theme (follow system)');
|
||||
auto.setAttribute('aria-checked', getStored() ? 'false' : 'true');
|
||||
|
||||
var autoTrack = doc.createElement('span');
|
||||
autoTrack.className = 'auto-track';
|
||||
var autoKnob = doc.createElement('span');
|
||||
autoKnob.className = 'auto-knob';
|
||||
autoTrack.appendChild(autoKnob);
|
||||
auto.appendChild(autoTrack);
|
||||
if (!getStored()) auto.classList.add('on');
|
||||
|
||||
autoWrap.appendChild(autoLabel);
|
||||
autoWrap.appendChild(auto);
|
||||
|
||||
// Divider before a11y slot
|
||||
var divider = doc.createElement('span');
|
||||
divider.className = 'fab-divider';
|
||||
|
||||
// A11y slot — buildA11yToolbar will inject its toggle here
|
||||
var a11ySlot = doc.createElement('span');
|
||||
a11ySlot.id = 'mokoA11ySlot';
|
||||
|
||||
// Behavior
|
||||
switchWrap.addEventListener('click', function () {
|
||||
@@ -101,6 +128,9 @@
|
||||
var next = current === 'dark' ? 'light' : 'dark';
|
||||
applyTheme(next);
|
||||
switchWrap.setAttribute('aria-checked', next === 'dark' ? 'true' : 'false');
|
||||
// Turn off auto when manually switching
|
||||
auto.classList.remove('on');
|
||||
auto.setAttribute('aria-checked', 'false');
|
||||
// Update meta theme color
|
||||
var meta = doc.querySelector('meta[name="theme-color"]');
|
||||
if (meta) {
|
||||
@@ -109,10 +139,14 @@
|
||||
});
|
||||
|
||||
auto.addEventListener('click', function () {
|
||||
clearStored();
|
||||
var sys = systemTheme();
|
||||
applyTheme(sys);
|
||||
switchWrap.setAttribute('aria-checked', sys === 'dark' ? 'true' : 'false');
|
||||
var isAuto = auto.classList.toggle('on');
|
||||
auto.setAttribute('aria-checked', isAuto ? 'true' : 'false');
|
||||
if (isAuto) {
|
||||
clearStored();
|
||||
var sys = systemTheme();
|
||||
applyTheme(sys);
|
||||
switchWrap.setAttribute('aria-checked', sys === 'dark' ? 'true' : 'false');
|
||||
}
|
||||
});
|
||||
|
||||
// Respond to OS changes only when not user-forced
|
||||
@@ -134,7 +168,9 @@
|
||||
wrap.appendChild(lblL);
|
||||
wrap.appendChild(switchWrap);
|
||||
wrap.appendChild(lblD);
|
||||
wrap.appendChild(auto);
|
||||
wrap.appendChild(autoWrap);
|
||||
wrap.appendChild(divider);
|
||||
wrap.appendChild(a11ySlot);
|
||||
doc.body.appendChild(wrap);
|
||||
|
||||
// Debug helper
|
||||
@@ -193,6 +229,18 @@
|
||||
|
||||
function applyContrast(on) {
|
||||
root.classList.toggle("a11y-high-contrast", on);
|
||||
// Lazy-load the high-contrast stylesheet
|
||||
var hcId = "mokoA11yHcSheet";
|
||||
var existing = doc.getElementById(hcId);
|
||||
if (on && !existing) {
|
||||
var link = doc.createElement("link");
|
||||
link.id = hcId;
|
||||
link.rel = "stylesheet";
|
||||
link.href = (doc.querySelector('link[href*="mokocassiopeia/css/template"]') || {}).href
|
||||
? (doc.querySelector('link[href*="mokocassiopeia/css/template"]').href.replace(/\/css\/template[^/]*$/, "/css/a11y-high-contrast.css"))
|
||||
: "media/templates/site/mokocassiopeia/css/a11y-high-contrast.css";
|
||||
doc.head.appendChild(link);
|
||||
}
|
||||
}
|
||||
|
||||
function applyLinks(on) {
|
||||
@@ -209,10 +257,10 @@
|
||||
|
||||
/** Create a Font Awesome icon element (safe DOM, no innerHTML). */
|
||||
function faIcon(classes) {
|
||||
var span = doc.createElement("span");
|
||||
span.className = classes;
|
||||
span.setAttribute("aria-hidden", "true");
|
||||
return span;
|
||||
var i = doc.createElement("i");
|
||||
i.className = classes;
|
||||
i.setAttribute("aria-hidden", "true");
|
||||
return i;
|
||||
}
|
||||
|
||||
function buildA11yToolbar() {
|
||||
@@ -359,23 +407,6 @@
|
||||
addSwitchOption(showFont, "font", "fa-solid fa-font", "Readable font", applyFont);
|
||||
addSwitchOption(showAnimations, "paused", "fa-solid fa-pause", "Pause animations", applyPaused);
|
||||
|
||||
// Toggle panel open/close
|
||||
toggle.addEventListener("click", function () {
|
||||
var isOpen = !panel.hidden;
|
||||
panel.hidden = isOpen;
|
||||
toggle.setAttribute("aria-expanded", isOpen ? "false" : "true");
|
||||
toggle.classList.toggle("active", !isOpen);
|
||||
});
|
||||
|
||||
// Close on outside click
|
||||
doc.addEventListener("click", function (e) {
|
||||
if (!toolbar.contains(e.target) && !panel.hidden) {
|
||||
panel.hidden = true;
|
||||
toggle.setAttribute("aria-expanded", "false");
|
||||
toggle.classList.remove("active");
|
||||
}
|
||||
});
|
||||
|
||||
// Apply saved preferences on load
|
||||
if (prefs.fontStep !== defaultStep) applyFontSize(prefs.fontStep);
|
||||
if (prefs.inverted) applyInversion(true);
|
||||
@@ -384,9 +415,55 @@
|
||||
if (prefs.font) applyFont(true);
|
||||
if (prefs.paused) applyPaused(true);
|
||||
|
||||
toolbar.appendChild(toggle);
|
||||
toolbar.appendChild(panel);
|
||||
body.appendChild(toolbar);
|
||||
// If theme FAB is present, mount a11y toggle inside it; otherwise standalone
|
||||
var fabSlot = doc.getElementById("mokoA11ySlot");
|
||||
if (fabSlot) {
|
||||
toggle.className = "a11y-toggle a11y-toggle-inline";
|
||||
fabSlot.appendChild(toggle);
|
||||
toolbar.className = "a11y-toolbar-floating";
|
||||
toolbar.appendChild(panel);
|
||||
body.appendChild(toolbar);
|
||||
// Position panel near the FAB
|
||||
toggle.addEventListener("click", function () {
|
||||
var isOpen = !panel.hidden;
|
||||
panel.hidden = isOpen;
|
||||
toggle.setAttribute("aria-expanded", isOpen ? "false" : "true");
|
||||
toggle.classList.toggle("active", !isOpen);
|
||||
if (!isOpen) {
|
||||
var rect = toggle.getBoundingClientRect();
|
||||
toolbar.style.position = "fixed";
|
||||
toolbar.style.bottom = (win.innerHeight - rect.top + 8) + "px";
|
||||
toolbar.style.right = (win.innerWidth - rect.right) + "px";
|
||||
toolbar.style.zIndex = "1202";
|
||||
}
|
||||
});
|
||||
// Close on outside click for inline mode
|
||||
doc.addEventListener("click", function (e) {
|
||||
if (!toggle.contains(e.target) && !toolbar.contains(e.target) && !panel.hidden) {
|
||||
panel.hidden = true;
|
||||
toggle.setAttribute("aria-expanded", "false");
|
||||
toggle.classList.remove("active");
|
||||
}
|
||||
});
|
||||
} else {
|
||||
// Standalone mode — toggle and close handlers
|
||||
toggle.addEventListener("click", function () {
|
||||
var isOpen = !panel.hidden;
|
||||
panel.hidden = isOpen;
|
||||
toggle.setAttribute("aria-expanded", isOpen ? "false" : "true");
|
||||
toggle.classList.toggle("active", !isOpen);
|
||||
});
|
||||
doc.addEventListener("click", function (e) {
|
||||
if (!toolbar.contains(e.target) && !panel.hidden) {
|
||||
panel.hidden = true;
|
||||
toggle.setAttribute("aria-expanded", "false");
|
||||
toggle.classList.remove("active");
|
||||
}
|
||||
});
|
||||
toolbar.appendChild(toggle);
|
||||
toolbar.appendChild(panel);
|
||||
body.appendChild(toolbar);
|
||||
}
|
||||
}
|
||||
|
||||
// ========================================================================
|
||||
|
||||
@@ -31,18 +31,21 @@
|
||||
-->
|
||||
<extension type="template" client="site" method="upgrade">
|
||||
<updateservers>
|
||||
<server type="extension" name="MokoCassiopeia Updates" priority="1">
|
||||
https://raw.githubusercontent.com/mokoconsulting-tech/MokoCassiopeia/main/updates.xml
|
||||
</server>
|
||||
<server type="extension" priority="1" name="MokoCassiopeia Update Server (Gitea)">
|
||||
https://git.mokoconsulting.tech/MokoConsulting/MokoCassiopeia/raw/branch/main/updates.xml
|
||||
</server>
|
||||
<server type="extension" priority="2" name="MokoCassiopeia Update Server (GitHub)">
|
||||
https://raw.githubusercontent.com/mokoconsulting-tech/MokoCassiopeia/main/updates.xml
|
||||
</server>
|
||||
</updateservers>
|
||||
<name>MokoCassiopeia</name>
|
||||
<version>03.09.12</version>
|
||||
<version>03.09.14</version>
|
||||
<scriptfile>script.php</scriptfile>
|
||||
<creationDate>2026-03-26</creationDate>
|
||||
<creationDate>2026-04-14</creationDate>
|
||||
<author>Jonathan Miller || Moko Consulting</author>
|
||||
<authorEmail>hello@mokoconsulting.tech</authorEmail>
|
||||
<copyright>(C)GNU General Public License Version 3 - 2026 Moko Consulting</copyright>
|
||||
<description><![CDATA[<p><img src="https://img.shields.io/badge/version-03.09.12-blue.svg?logo=v&logoColor=white" alt="Version 03.09.12" /> <img src="https://img.shields.io/badge/license-GPL--3.0--or--later-green.svg?logo=gnu&logoColor=white" alt="License" /> <img src="https://img.shields.io/badge/Joomla-5.x%20%7C%206.x-red.svg?logo=joomla&logoColor=white" alt="Joomla" /> <img src="https://img.shields.io/badge/PHP-8.1%2B-777BB4.svg?logo=php&logoColor=white" alt="PHP" /></p> <h3>MokoCassiopeia Template Description</h3> <p> <strong>MokoCassiopeia</strong> continues Joomla's tradition of space-themed default templates— building on the legacy of <em>Solarflare</em> (Joomla 1.0), <em>Milkyway</em> (Joomla 1.5), and <em>Protostar</em> (Joomla 3.0). </p> <p> This template is a customized fork of the <strong>Cassiopeia</strong> template introduced in Joomla 4, preserving its modern, accessible, and mobile-first foundation while introducing new stylistic enhancements and structural refinements specifically tailored for use by Moko Consulting. </p> <h4>Custom Colour Themes</h4> <p> Starter palette files are included with the template. To create a custom colour scheme, copy <code>templates/mokocassiopeia/templates/light.custom.css</code> to <code>media/templates/site/mokocassiopeia/css/theme/light.custom.css</code>, or <code>templates/mokocassiopeia/templates/dark.custom.css</code> to <code>media/templates/site/mokocassiopeia/css/theme/dark.custom.css</code>. Customise the CSS variables to match your brand, then activate your palette in <em>System → Site Templates → MokoCassiopeia → Theme tab</em> by selecting "Custom" for the Light or Dark Mode Palette. A full variable reference is available in the <em>CSS Variables</em> tab in template options. </p> <h4>Custom CSS & JavaScript</h4> <p> For site-specific styles and scripts that should survive template updates, create the following files: </p> <ul> <li><code>media/templates/site/mokocassiopeia/css/user.css</code> — loaded on every page for custom CSS overrides.</li> <li><code>media/templates/site/mokocassiopeia/js/user.js</code> — loaded on every page for custom JavaScript.</li> </ul> <p> These files are gitignored and will not be overwritten by template updates. </p> <h4>Code Attribution</h4> <p> This template is based on the original <strong>Cassiopeia</strong> template developed by the <a href="https://www.joomla.org" target="_blank" rel="noopener">Joomla! Project</a> and released under the GNU General Public License. </p> <p> Modifications and enhancements have been made by Moko Consulting in accordance with open-source licensing standards. </p> <p> It includes integration with <a href="https://afeld.github.io/bootstrap-toc/" target="_blank" rel="noopener">Bootstrap TOC</a>, an open-source table of contents generator by A. Feld, licensed under the MIT License. </p> <p> All third-party libraries and assets remain the property of their respective authors and are credited within their source files where applicable. </p>]]></description>
|
||||
<description><![CDATA[<p><img src="https://img.shields.io/badge/version-03.09.14-blue.svg?logo=v&logoColor=white" alt="Version 03.09.14" /> <img src="https://img.shields.io/badge/license-GPL--3.0--or--later-green.svg?logo=gnu&logoColor=white" alt="License" /> <img src="https://img.shields.io/badge/Joomla-5.x%20%7C%206.x-red.svg?logo=joomla&logoColor=white" alt="Joomla" /> <img src="https://img.shields.io/badge/PHP-8.1%2B-777BB4.svg?logo=php&logoColor=white" alt="PHP" /></p> <h3>MokoCassiopeia Template Description</h3> <p> <strong>MokoCassiopeia</strong> continues Joomla's tradition of space-themed default templates— building on the legacy of <em>Solarflare</em> (Joomla 1.0), <em>Milkyway</em> (Joomla 1.5), and <em>Protostar</em> (Joomla 3.0). </p> <p> This template is a customized fork of the <strong>Cassiopeia</strong> template introduced in Joomla 4, preserving its modern, accessible, and mobile-first foundation while introducing new stylistic enhancements and structural refinements specifically tailored for use by Moko Consulting. </p> <h4>Custom Colour Themes</h4> <p> Starter palette files are included with the template. To create a custom colour scheme, copy <code>templates/mokocassiopeia/templates/light.custom.css</code> to <code>media/templates/site/mokocassiopeia/css/theme/light.custom.css</code>, or <code>templates/mokocassiopeia/templates/dark.custom.css</code> to <code>media/templates/site/mokocassiopeia/css/theme/dark.custom.css</code>. Customise the CSS variables to match your brand, then activate your palette in <em>System → Site Templates → MokoCassiopeia → Theme tab</em> by selecting "Custom" for the Light or Dark Mode Palette. A full variable reference is available in the <em>CSS Variables</em> tab in template options. </p> <h4>Custom CSS & JavaScript</h4> <p> For site-specific styles and scripts that should survive template updates, create the following files: </p> <ul> <li><code>media/templates/site/mokocassiopeia/css/user.css</code> — loaded on every page for custom CSS overrides.</li> <li><code>media/templates/site/mokocassiopeia/js/user.js</code> — loaded on every page for custom JavaScript.</li> </ul> <p> These files are gitignored and will not be overwritten by template updates. </p> <h4>Code Attribution</h4> <p> This template is based on the original <strong>Cassiopeia</strong> template developed by the <a href="https://www.joomla.org" target="_blank" rel="noopener">Joomla! Project</a> and released under the GNU General Public License. </p> <p> Modifications and enhancements have been made by Moko Consulting in accordance with open-source licensing standards. </p> <p> It includes integration with <a href="https://afeld.github.io/bootstrap-toc/" target="_blank" rel="noopener">Bootstrap TOC</a>, an open-source table of contents generator by A. Feld, licensed under the MIT License. </p> <p> All third-party libraries and assets remain the property of their respective authors and are credited within their source files where applicable. </p>]]></description>
|
||||
<inheritable>1</inheritable>
|
||||
<files>
|
||||
<filename>component.php</filename>
|
||||
|
||||
@@ -813,6 +813,12 @@ color-scheme: dark;
|
||||
--table-active-color: var(--body-color);
|
||||
--table-active-bg: rgba(var(--white-rgb), 0.1);
|
||||
|
||||
/* ===== FOOTER ===== */
|
||||
--footer-padding-top: 1rem;
|
||||
--footer-padding-bottom: 80px;
|
||||
--footer-grid-padding-y: 2.5rem;
|
||||
--footer-grid-padding-x: 0.5em;
|
||||
|
||||
/* ===== BACKDROP ===== */
|
||||
--backdrop-zindex: 1040;
|
||||
--backdrop-bg: hsl(0, 0%, 0%);
|
||||
|
||||
@@ -812,6 +812,12 @@ color-scheme: light;
|
||||
--table-active-color: var(--body-color);
|
||||
--table-active-bg: rgba(var(--black-rgb), 0.075);
|
||||
|
||||
/* ===== FOOTER ===== */
|
||||
--footer-padding-top: 1rem;
|
||||
--footer-padding-bottom: 80px;
|
||||
--footer-grid-padding-y: 2.5rem;
|
||||
--footer-grid-padding-x: 0.5em;
|
||||
|
||||
/* ===== BACKDROP ===== */
|
||||
--backdrop-zindex: 1040;
|
||||
--backdrop-bg: hsl(0, 0%, 0%);
|
||||
|
||||
22
templates/configs/pa11yci.json
Normal file
22
templates/configs/pa11yci.json
Normal file
@@ -0,0 +1,22 @@
|
||||
{
|
||||
"defaults": {
|
||||
"standard": "WCAG2AA",
|
||||
"timeout": 30000,
|
||||
"wait": 1000,
|
||||
"ignore": [],
|
||||
"chromeLaunchConfig": {
|
||||
"args": [
|
||||
"--no-sandbox",
|
||||
"--disable-setuid-sandbox"
|
||||
]
|
||||
}
|
||||
},
|
||||
"urls": [
|
||||
{
|
||||
"url": "http://localhost:8080/",
|
||||
"actions": []
|
||||
}
|
||||
],
|
||||
"concurrency": 2,
|
||||
"useIncognitoBrowserContext": true
|
||||
}
|
||||
238
updates.xml
238
updates.xml
@@ -1,119 +1,119 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<!-- Copyright (C) 2026 Moko Consulting <hello@mokoconsulting.tech>
|
||||
SPDX-License-Identifier: GPL-3.0-or-later
|
||||
VERSION: 03.09.14
|
||||
-->
|
||||
|
||||
<updates>
|
||||
|
||||
<!-- 1. DEVELOPMENT — dev → -->
|
||||
<update>
|
||||
<name>MokoCassiopeia</name>
|
||||
<description>MokoCassiopeia development build — unstable.</description>
|
||||
<element>mokocassiopeia</element>
|
||||
<type>template</type>
|
||||
<client>site</client>
|
||||
<version>03.09.14</version>
|
||||
<creationDate>2026-04-14</creationDate>
|
||||
<infourl title='MokoCassiopeia Dev'>https://git.mokoconsulting.tech/MokoConsulting/MokoCassiopeia/releases/tag/development</infourl>
|
||||
<downloads>
|
||||
<downloadurl type='full' format='zip'>https://git.mokoconsulting.tech/MokoConsulting/MokoCassiopeia/releases/download/development/mokocassiopeia-03.09.14-dev.zip</downloadurl>
|
||||
<downloadurl type='full' format='zip'>https://github.com/mokoconsulting-tech/MokoCassiopeia/releases/download/development/mokocassiopeia-03.09.14-dev.zip</downloadurl>
|
||||
</downloads>
|
||||
<sha256>4cbe4fc379182ef17580396e7d12ce4ce95a90017ef364b922bdc2d04b0b3d97</sha256>
|
||||
<tags><tag>development</tag></tags>
|
||||
<maintainer>Moko Consulting</maintainer>
|
||||
<maintainerurl>https://mokoconsulting.tech</maintainerurl>
|
||||
<targetplatform name='joomla' version='(5|6).*'/>
|
||||
<php_minimum>8.1</php_minimum>
|
||||
</update>
|
||||
|
||||
<!-- 2. ALPHA — dev → alpha → -->
|
||||
<update>
|
||||
<name>MokoCassiopeia</name>
|
||||
<description>MokoCassiopeia alpha build — early testing.</description>
|
||||
<element>mokocassiopeia</element>
|
||||
<type>template</type>
|
||||
<client>site</client>
|
||||
<version>03.09.14</version>
|
||||
<creationDate>2026-04-14</creationDate>
|
||||
<infourl title='MokoCassiopeia Alpha'>https://git.mokoconsulting.tech/MokoConsulting/MokoCassiopeia/releases/tag/alpha</infourl>
|
||||
<downloads>
|
||||
<downloadurl type='full' format='zip'>https://git.mokoconsulting.tech/MokoConsulting/MokoCassiopeia/releases/download/alpha/mokocassiopeia-03.09.14-alpha.zip</downloadurl>
|
||||
<downloadurl type='full' format='zip'>https://github.com/mokoconsulting-tech/MokoCassiopeia/releases/download/alpha/mokocassiopeia-03.09.14-alpha.zip</downloadurl>
|
||||
</downloads>
|
||||
<sha256>c2660acdf7389244462485f7ab4c286e9f851366a148acc16739a184576f7932</sha256>
|
||||
<tags><tag>alpha</tag></tags>
|
||||
<maintainer>Moko Consulting</maintainer>
|
||||
<maintainerurl>https://mokoconsulting.tech</maintainerurl>
|
||||
<targetplatform name='joomla' version='(5|6).*'/>
|
||||
<php_minimum>8.1</php_minimum>
|
||||
</update>
|
||||
|
||||
<!-- 3. BETA — dev → alpha → beta → -->
|
||||
<update>
|
||||
<name>MokoCassiopeia</name>
|
||||
<description>MokoCassiopeia beta build — feature complete, stability testing.</description>
|
||||
<element>mokocassiopeia</element>
|
||||
<type>template</type>
|
||||
<client>site</client>
|
||||
<version>03.09.14</version>
|
||||
<creationDate>2026-04-14</creationDate>
|
||||
<infourl title='MokoCassiopeia Beta'>https://git.mokoconsulting.tech/MokoConsulting/MokoCassiopeia/releases/tag/beta</infourl>
|
||||
<downloads>
|
||||
<downloadurl type='full' format='zip'>https://git.mokoconsulting.tech/MokoConsulting/MokoCassiopeia/releases/download/beta/mokocassiopeia-03.09.14-beta.zip</downloadurl>
|
||||
<downloadurl type='full' format='zip'>https://github.com/mokoconsulting-tech/MokoCassiopeia/releases/download/beta/mokocassiopeia-03.09.14-beta.zip</downloadurl>
|
||||
</downloads>
|
||||
<sha256>4cbe4fc379182ef17580396e7d12ce4ce95a90017ef364b922bdc2d04b0b3d97</sha256>
|
||||
<tags><tag>beta</tag></tags>
|
||||
<maintainer>Moko Consulting</maintainer>
|
||||
<maintainerurl>https://mokoconsulting.tech</maintainerurl>
|
||||
<targetplatform name='joomla' version='(5|6).*'/>
|
||||
<php_minimum>8.1</php_minimum>
|
||||
</update>
|
||||
|
||||
<!-- 4. RC — dev → alpha → beta → rc → -->
|
||||
<update>
|
||||
<name>MokoCassiopeia</name>
|
||||
<description>MokoCassiopeia release candidate — testing only.</description>
|
||||
<element>mokocassiopeia</element>
|
||||
<type>template</type>
|
||||
<client>site</client>
|
||||
<version>03.09.14</version>
|
||||
<creationDate>2026-04-14</creationDate>
|
||||
<infourl title='MokoCassiopeia RC'>https://git.mokoconsulting.tech/MokoConsulting/MokoCassiopeia/releases/tag/release-candidate</infourl>
|
||||
<downloads>
|
||||
<downloadurl type='full' format='zip'>https://git.mokoconsulting.tech/MokoConsulting/MokoCassiopeia/releases/download/release-candidate/mokocassiopeia-03.09.14-rc.zip</downloadurl>
|
||||
<downloadurl type='full' format='zip'>https://github.com/mokoconsulting-tech/MokoCassiopeia/releases/download/release-candidate/mokocassiopeia-03.09.14-rc.zip</downloadurl>
|
||||
</downloads>
|
||||
<sha256>c2660acdf7389244462485f7ab4c286e9f851366a148acc16739a184576f7932</sha256>
|
||||
<tags><tag>rc</tag></tags>
|
||||
<maintainer>Moko Consulting</maintainer>
|
||||
<maintainerurl>https://mokoconsulting.tech</maintainerurl>
|
||||
<targetplatform name='joomla' version='(5|6).*'/>
|
||||
<php_minimum>8.1</php_minimum>
|
||||
</update>
|
||||
|
||||
<!-- 5. STABLE — dev → alpha → beta → rc → version/XX → main -->
|
||||
<update>
|
||||
<name>MokoCassiopeia</name>
|
||||
<description>Moko Consulting's site template based on Cassiopeia.</description>
|
||||
<element>mokocassiopeia</element>
|
||||
<type>template</type>
|
||||
<client>site</client>
|
||||
<version>03.09.14</version>
|
||||
<creationDate>2026-04-14</creationDate>
|
||||
<infourl title='MokoCassiopeia'>https://git.mokoconsulting.tech/MokoConsulting/MokoCassiopeia/releases/tag/v03</infourl>
|
||||
<downloads>
|
||||
<downloadurl type='full' format='zip'>https://git.mokoconsulting.tech/MokoConsulting/MokoCassiopeia/releases/download/v03/mokocassiopeia-03.09.14.zip</downloadurl>
|
||||
<downloadurl type='full' format='zip'>https://github.com/mokoconsulting-tech/MokoCassiopeia/releases/download/v03/mokocassiopeia-03.09.14.zip</downloadurl>
|
||||
</downloads>
|
||||
<sha256>c2660acdf7389244462485f7ab4c286e9f851366a148acc16739a184576f7932</sha256>
|
||||
<tags><tag>stable</tag></tags>
|
||||
<maintainer>Moko Consulting</maintainer>
|
||||
<maintainerurl>https://mokoconsulting.tech</maintainerurl>
|
||||
<targetplatform name='joomla' version='(5|6).*'/>
|
||||
<php_minimum>8.1</php_minimum>
|
||||
</update>
|
||||
|
||||
</updates>
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<!-- Copyright (C) 2026 Moko Consulting <hello@mokoconsulting.tech>
|
||||
SPDX-License-Identifier: GPL-3.0-or-later
|
||||
VERSION: 03.09.14
|
||||
-->
|
||||
|
||||
<updates>
|
||||
|
||||
<!-- 1. DEVELOPMENT — dev → -->
|
||||
<update>
|
||||
<name>MokoCassiopeia</name>
|
||||
<description>MokoCassiopeia development build — unstable.</description>
|
||||
<element>mokocassiopeia</element>
|
||||
<type>template</type>
|
||||
<client>site</client>
|
||||
<version>03.09.14</version>
|
||||
<creationDate>2026-04-14</creationDate>
|
||||
<infourl title='MokoCassiopeia Dev'>https://git.mokoconsulting.tech/MokoConsulting/MokoCassiopeia/releases/tag/development</infourl>
|
||||
<downloads>
|
||||
<downloadurl type='full' format='zip'>https://git.mokoconsulting.tech/MokoConsulting/MokoCassiopeia/releases/download/development/mokocassiopeia-03.09.14-dev.zip</downloadurl>
|
||||
<downloadurl type='full' format='zip'>https://git.mokoconsulting.tech/MokoConsulting/MokoCassiopeia/releases/download/development/mokocassiopeia-03.09.14-dev.zip</downloadurl>
|
||||
</downloads>
|
||||
<sha256>4cbe4fc379182ef17580396e7d12ce4ce95a90017ef364b922bdc2d04b0b3d97</sha256>
|
||||
<tags><tag>development</tag></tags>
|
||||
<maintainer>Moko Consulting</maintainer>
|
||||
<maintainerurl>https://mokoconsulting.tech</maintainerurl>
|
||||
<targetplatform name='joomla' version='(5|6).*'/>
|
||||
<php_minimum>8.1</php_minimum>
|
||||
</update>
|
||||
|
||||
<!-- 2. ALPHA — dev → alpha → -->
|
||||
<update>
|
||||
<name>MokoCassiopeia</name>
|
||||
<description>MokoCassiopeia alpha build — early testing.</description>
|
||||
<element>mokocassiopeia</element>
|
||||
<type>template</type>
|
||||
<client>site</client>
|
||||
<version>03.09.14</version>
|
||||
<creationDate>2026-04-14</creationDate>
|
||||
<infourl title='MokoCassiopeia Alpha'>https://git.mokoconsulting.tech/MokoConsulting/MokoCassiopeia/releases/tag/alpha</infourl>
|
||||
<downloads>
|
||||
<downloadurl type='full' format='zip'>https://git.mokoconsulting.tech/MokoConsulting/MokoCassiopeia/releases/download/alpha/mokocassiopeia-03.09.14-alpha.zip</downloadurl>
|
||||
<downloadurl type='full' format='zip'>https://git.mokoconsulting.tech/MokoConsulting/MokoCassiopeia/releases/download/alpha/mokocassiopeia-03.09.14-alpha.zip</downloadurl>
|
||||
</downloads>
|
||||
<sha256>c2660acdf7389244462485f7ab4c286e9f851366a148acc16739a184576f7932</sha256>
|
||||
<tags><tag>alpha</tag></tags>
|
||||
<maintainer>Moko Consulting</maintainer>
|
||||
<maintainerurl>https://mokoconsulting.tech</maintainerurl>
|
||||
<targetplatform name='joomla' version='(5|6).*'/>
|
||||
<php_minimum>8.1</php_minimum>
|
||||
</update>
|
||||
|
||||
<!-- 3. BETA — dev → alpha → beta → -->
|
||||
<update>
|
||||
<name>MokoCassiopeia</name>
|
||||
<description>MokoCassiopeia beta build — feature complete, stability testing.</description>
|
||||
<element>mokocassiopeia</element>
|
||||
<type>template</type>
|
||||
<client>site</client>
|
||||
<version>03.09.14</version>
|
||||
<creationDate>2026-04-14</creationDate>
|
||||
<infourl title='MokoCassiopeia Beta'>https://git.mokoconsulting.tech/MokoConsulting/MokoCassiopeia/releases/tag/beta</infourl>
|
||||
<downloads>
|
||||
<downloadurl type='full' format='zip'>https://git.mokoconsulting.tech/MokoConsulting/MokoCassiopeia/releases/download/beta/mokocassiopeia-03.09.14-beta.zip</downloadurl>
|
||||
<downloadurl type='full' format='zip'>https://git.mokoconsulting.tech/MokoConsulting/MokoCassiopeia/releases/download/beta/mokocassiopeia-03.09.14-beta.zip</downloadurl>
|
||||
</downloads>
|
||||
<sha256>4cbe4fc379182ef17580396e7d12ce4ce95a90017ef364b922bdc2d04b0b3d97</sha256>
|
||||
<tags><tag>beta</tag></tags>
|
||||
<maintainer>Moko Consulting</maintainer>
|
||||
<maintainerurl>https://mokoconsulting.tech</maintainerurl>
|
||||
<targetplatform name='joomla' version='(5|6).*'/>
|
||||
<php_minimum>8.1</php_minimum>
|
||||
</update>
|
||||
|
||||
<!-- 4. RC — dev → alpha → beta → rc → -->
|
||||
<update>
|
||||
<name>MokoCassiopeia</name>
|
||||
<description>MokoCassiopeia release candidate — testing only.</description>
|
||||
<element>mokocassiopeia</element>
|
||||
<type>template</type>
|
||||
<client>site</client>
|
||||
<version>03.09.14</version>
|
||||
<creationDate>2026-04-14</creationDate>
|
||||
<infourl title='MokoCassiopeia RC'>https://git.mokoconsulting.tech/MokoConsulting/MokoCassiopeia/releases/tag/release-candidate</infourl>
|
||||
<downloads>
|
||||
<downloadurl type='full' format='zip'>https://git.mokoconsulting.tech/MokoConsulting/MokoCassiopeia/releases/download/release-candidate/mokocassiopeia-03.09.14-rc.zip</downloadurl>
|
||||
<downloadurl type='full' format='zip'>https://git.mokoconsulting.tech/MokoConsulting/MokoCassiopeia/releases/download/release-candidate/mokocassiopeia-03.09.14-rc.zip</downloadurl>
|
||||
</downloads>
|
||||
<sha256>c2660acdf7389244462485f7ab4c286e9f851366a148acc16739a184576f7932</sha256>
|
||||
<tags><tag>rc</tag></tags>
|
||||
<maintainer>Moko Consulting</maintainer>
|
||||
<maintainerurl>https://mokoconsulting.tech</maintainerurl>
|
||||
<targetplatform name='joomla' version='(5|6).*'/>
|
||||
<php_minimum>8.1</php_minimum>
|
||||
</update>
|
||||
|
||||
<!-- 5. STABLE — dev → alpha → beta → rc → version/XX → main -->
|
||||
<update>
|
||||
<name>MokoCassiopeia</name>
|
||||
<description>Moko Consulting's site template based on Cassiopeia.</description>
|
||||
<element>mokocassiopeia</element>
|
||||
<type>template</type>
|
||||
<client>site</client>
|
||||
<version>03.09.14</version>
|
||||
<creationDate>2026-04-14</creationDate>
|
||||
<infourl title='MokoCassiopeia'>https://git.mokoconsulting.tech/MokoConsulting/MokoCassiopeia/releases/tag/v03</infourl>
|
||||
<downloads>
|
||||
<downloadurl type='full' format='zip'>https://git.mokoconsulting.tech/MokoConsulting/MokoCassiopeia/releases/download/v03/mokocassiopeia-03.09.14.zip</downloadurl>
|
||||
<downloadurl type='full' format='zip'>https://git.mokoconsulting.tech/MokoConsulting/MokoCassiopeia/releases/download/v03/mokocassiopeia-03.09.14.zip</downloadurl>
|
||||
</downloads>
|
||||
<sha256>c2660acdf7389244462485f7ab4c286e9f851366a148acc16739a184576f7932</sha256>
|
||||
<tags><tag>stable</tag></tags>
|
||||
<maintainer>Moko Consulting</maintainer>
|
||||
<maintainerurl>https://mokoconsulting.tech</maintainerurl>
|
||||
<targetplatform name='joomla' version='(5|6).*'/>
|
||||
<php_minimum>8.1</php_minimum>
|
||||
</update>
|
||||
|
||||
</updates>
|
||||
|
||||
Reference in New Issue
Block a user