Files
MokoCassiopeia/src/templateDetails.xml
Jonathan Miller f0e7ccac6d Add minify build script and generate .min CSS/JS; rename position to brand-aside
Build tooling:
- Add package.json with clean-css and terser dev dependencies
- Add scripts/minify.js: reads joomla.asset.json, auto-detects source/.min
  pairs, and minifies all template-owned CSS and JS files
- Add node_modules/ to .gitignore

Generated .min files (all 6 manifest pairs):
- css/template.min.css      (17.8% saved)
- css/editor.min.css        (49.4% saved)
- css/theme/light.standard.min.css  (13.1% saved)
- css/theme/dark.standard.min.css   (14.4% saved)
- js/template.min.js        (58.2% saved)
- js/gtm.min.js             (62.3% saved)

Rename: header-aside → brand-aside (position, CSS class, language keys)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-17 20:22:09 -05:00

280 lines
19 KiB
XML

<?xml version="1.0" encoding="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
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; 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/>.
=========================================================================
FILE INFORMATION
DEFGROUP: Joomla
INGROUP: MokoCassiopeia
PATH: templates/mokocassiopeia/templateDetails.xml
VERSION: 03.09.01
BRIEF: Template manifest XML file for MokoCassiopeia
=========================================================================
-->
<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>
</updateservers>
<name>MokoCassiopeia</name>
<version>03.09.01</version>
<creationDate>2026-03-08</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[<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 &amp; 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>
<filename>error.php</filename>
<filename>index.php</filename>
<filename>joomla.asset.json</filename>
<filename>offline.php</filename>
<filename>templateDetails.xml</filename>
<folder>html</folder>
<folder>language</folder>
<folder>templates</folder>
</files>
<stylesheets>
<stylesheet>media/templates/site/mokocassiopeia/css/editor.css</stylesheet>
</stylesheets>
<media destination="templates/site/mokocassiopeia" folder="media">
<folder>js</folder>
<folder>css</folder>
<folder>images</folder>
<folder>fonts</folder>
</media>
<positions>
<position>topbar</position>
<position>below-topbar</position>
<position>below-logo</position>
<position>brand-aside</position>
<position>menu</position>
<position>search</position>
<position>banner</position>
<position>top-a</position>
<position>top-b</position>
<position>main-top</position>
<position>main-bottom</position>
<position>breadcrumbs</position>
<position>sidebar-left</position>
<position>sidebar-right</position>
<position>bottom-a</position>
<position>bottom-b</position>
<position>footer-menu</position>
<position>footer</position>
<position>debug</position>
<position>offline-header</position>
<position>offline</position>
<position>offline-footer</position>
<position>drawer-left</position>
<position>drawer-right</position>
</positions>
<languages>
<language tag="en-GB">language/en-GB/tpl_mokocassiopeia.ini</language>
<language tag="en-GB">language/en-GB/tpl_mokocassiopeia.sys.ini</language>
<language tag="en-US">language/en-US/tpl_mokocassiopeia.ini</language>
<language tag="en-US">language/en-US/tpl_mokocassiopeia.sys.ini</language>
</languages>
<config>
<fields name="params">
<!-- Advanced tab (non-theme/system options only) -->
<fieldset name="advanced">
<!--
<field name="developmentmode" type="radio" label="TPL_MOKOCASSIOPEIA_DEVELOPMENTMODE_LABEL" description="TPL_MOKOCASSIOPEIA_DEVELOPMENTMODE_DESC" default="1" layout="joomla.form.field.radio.switcher" filter="boolean">
<option value="0">JNO</option>
<option value="1">JYES</option>
</field>
-->
<field name="fluidContainer" type="radio" layout="joomla.form.field.radio.switcher" default="0" label="TPL_MOKOCASSIOPEIA_FLUID_LABEL">
<option value="0">TPL_MOKOCASSIOPEIA_STATIC</option>
<option value="1">TPL_MOKOCASSIOPEIA_FLUID</option>
</field>
</fieldset>
<!-- Google tab -->
<fieldset name="google" label="TPL_MOKOCASSIOPEIA_GOOGLE_FIELDSET_LABEL">
<field name="googletagmanager" type="radio" label="TPL_MOKOCASSIOPEIA_GOOGLETAGMANAGER_LABEL" description="TPL_MOKOCASSIOPEIA_GOOGLETAGMANAGER_DESC" layout="joomla.form.field.radio.switcher" filter="boolean">
<option value="0">JNO</option>
<option value="1">JYES</option>
</field>
<field name="googletagmanagerid" type="text" default="" label="TPL_MOKOCASSIOPEIA_GOOGLETAGMANAGERID_LABEL" description="TPL_MOKOCASSIOPEIA_GOOGLETAGMANAGERID_DESC" filter="string" showon="googletagmanager:1" />
<field name="googleanalytics" type="radio" label="TPL_MOKOCASSIOPEIA_GOOGLEANALYTICS_LABEL" description="TPL_MOKOCASSIOPEIA_GOOGLEANALYTICS_DESC" layout="joomla.form.field.radio.switcher" filter="boolean">
<option value="0">JNO</option>
<option value="1">JYES</option>
</field>
<field name="googleanalyticsid" type="text" default="" label="TPL_MOKOCASSIOPEIA_GOOGLEANALYTICSID_LABEL" description="TPL_MOKOCASSIOPEIA_GOOGLEANALYTICSID_DESC" filter="string" showon="googleanalytics:1" />
<field name="googlesitekey" type="text" default="" label="TPL_MOKOCASSIOPEIA_GOOGLESITEKEY_LABEL" description="TPL_MOKOCASSIOPEIA_GOOGLESITEKEY_DESC" filter="string" />
</fieldset>
<!-- Custom Code tab -->
<fieldset name="custom_head" label="TPL_MOKOCASSIOPEIA_CUSTOM_CODE_FIELDSET">
<field name="custom_head_start" type="textarea" default="" label="TPL_MOKOCASSIOPEIA_CUSTOM_HEAD_START_LABEL" description="TPL_MOKOCASSIOPEIA_CUSTOM_HEAD_START_DESC" filter="raw" />
<field name="custom_head_end" type="textarea" default="" label="TPL_MOKOCASSIOPEIA_CUSTOM_HEAD_END_LABEL" description="TPL_MOKOCASSIOPEIA_CUSTOM_HEAD_END_DESC" filter="raw" />
</fieldset>
<!-- Drawers tab -->
<fieldset name="drawers" label="TPL_MOKOCASSIOPEIA_DRAWERS_FIELDSET_LABEL">
<field name="drawerLeftIcon" type="text" default="fa-solid fa-chevron-right" label="TPL_MOKOCASSIOPEIA_DRAWER_LEFT_ICON_LABEL" description="TPL_MOKOCASSIOPEIA_DRAWER_LEFT_ICON_DESC" filter="string" />
<field name="drawerRightIcon" type="text" default="fa-solid fa-chevron-left" label="TPL_MOKOCASSIOPEIA_DRAWER_RIGHT_ICON_LABEL" description="TPL_MOKOCASSIOPEIA_DRAWER_RIGHT_ICON_DESC" filter="string" />
</fieldset>
<!-- THEME TAB (all style/theme settings grouped) -->
<fieldset name="theme" label="TPL_MOKO_THEME_FIELDSET">
<!-- General -->
<field name="theme_sep_general" type="spacer" label="General" hr="false" class="text fw-bold" />
<field name="theme_enabled" type="radio" default="1"
label="TPL_MOKO_THEME_ENABLED" description="TPL_MOKO_THEME_ENABLED_DESC"
layout="joomla.form.field.radio.switcher" filter="boolean">
<option value="0">JNO</option>
<option value="1">JYES</option>
</field>
<field name="theme_control_type" type="list" default="radios"
label="TPL_MOKO_THEME_CONTROL_TYPE" description="TPL_MOKO_THEME_CONTROL_TYPE_DESC">
<option value="switch">Switch (Light↔Dark)</option>
<option value="radios">Radios (Light/Dark/System)</option>
<option value="none">No visible control</option>
</field>
<field name="theme_default_choice" type="list" default="system"
label="TPL_MOKO_THEME_DEFAULT_CHOICE" description="TPL_MOKO_THEME_DEFAULT_CHOICE_DESC">
<option value="system">System</option>
<option value="light">Light</option>
<option value="dark">Dark</option>
</field>
<field name="theme_auto_dark" type="radio" default="0"
label="TPL_MOKO_THEME_AUTO_DARK" description="TPL_MOKO_THEME_AUTO_DARK_DESC"
layout="joomla.form.field.radio.switcher" filter="boolean">
<option value="0">JNO</option>
<option value="1">JYES</option>
</field>
<field name="theme_meta_color_scheme" type="radio" default="1"
label="TPL_MOKO_THEME_META_COLOR_SCHEME" description="TPL_MOKO_THEME_META_COLOR_SCHEME_DESC"
layout="joomla.form.field.radio.switcher" filter="boolean">
<option value="0">JNO</option>
<option value="1">JYES</option>
</field>
<field name="theme_meta_theme_color" type="radio" default="1"
label="TPL_MOKO_THEME_META_THEME_COLOR" description="TPL_MOKO_THEME_META_THEME_COLOR_DESC"
layout="joomla.form.field.radio.switcher" filter="boolean">
<option value="0">JNO</option>
<option value="1">JYES</option>
</field>
<field name="theme_bridge_bs_aria" type="radio" default="1"
label="TPL_MOKO_THEME_BRIDGE" description="TPL_MOKO_THEME_BRIDGE_DESC"
layout="joomla.form.field.radio.switcher" filter="boolean">
<option value="0">JNO</option>
<option value="1">JYES</option>
</field>
<!-- Variables & Palettes -->
<field name="theme_sep_vars" type="spacer" label="Variables &amp; Palettes" hr="false" class="text fw-bold" />
<field name="colorLightName" type="list" label="TPL_MOKOCASSIOPEIA_COLOR_LIGHT_NAME_LABEL" hint="TPL_MOKOCASSIOPEIA_COLOR_LIGHT_NAME_DESC" default="standard">
<option value="standard">TPL_MOKOCASSIOPEIA_COLOR_NAME_STANDARD</option>
<option value="custom">TPL_MOKOCASSIOPEIA_COLOR_NAME_CUSTOM</option>
</field>
<field name="colorDarkName" type="list" label="TPL_MOKOCASSIOPEIA_COLOR_DARK_NAME_LABEL" hint="TPL_MOKOCASSIOPEIA_COLOR_DARK_NAME_DESC" default="standard">
<option value="standard">TPL_MOKOCASSIOPEIA_COLOR_NAME_STANDARD</option>
<option value="custom">TPL_MOKOCASSIOPEIA_COLOR_NAME_CUSTOM</option>
</field>
<!-- Typography -->
<field name="theme_sep_typo" type="spacer" label="Typography" hr="false" class="text fw-bold" />
<field name="useFontScheme" type="groupedlist" label="TPL_MOKOCASSIOPEIA_FONT_LABEL" description="TPL_MOKOCASSIOPEIA_FONT_LABEL_DESC" default="media/templates/site/mokocassiopeia/css/fonts/roboto.css">
<option value="0">JNONE</option>
<group label="TPL_MOKOCASSIOPEIA_FONT_GROUP_LOCAL">
<option value="media/templates/site/mokocassiopeia/css/fonts/roboto.css">Roboto (local)</option>
<option value="media/templates/site/mokocassiopeia/css/fonts/noto-sans.css">Noto Sans (local)</option>
<option value="media/templates/site/mokocassiopeia/css/fonts/fira-sans.css">Fira Sans (local)</option>
</group>
</field>
<field name="noteFontScheme" type="note" description="TPL_MOKOCASSIOPEIA_FONT_NOTE_TEXT" class="alert alert-warning" />
<!-- Branding & Icons -->
<field name="theme_sep_brand" type="spacer" label="Branding &amp; Icons" hr="false" class="text fw-bold" />
<field name="brand" type="radio" label="TPL_MOKOCASSIOPEIA_BRAND_LABEL" default="1" layout="joomla.form.field.radio.switcher" filter="boolean">
<option value="0">JNO</option>
<option value="1">JYES</option>
</field>
<field name="logoFile" type="media" label="TPL_MOKOCASSIOPEIA_LOGO_LABEL" showon="brand:1" />
<field name="siteTitle" type="text" default="MokoCassiopeia" label="TPL_MOKOCASSIOPEIA_TITLE" filter="string" showon="brand:1" />
<field name="siteDescription" type="text" default="" label="TPL_MOKOCASSIOPEIA_TAGLINE_LABEL" description="TPL_MOKOCASSIOPEIA_TAGLINE_DESC" filter="string" showon="brand:1" />
<field name="fA6KitCode" type="text" default="" label="TPL_MOKOCASSIOPEIA_FA7KITCODE_LABEL" description="TPL_MOKOCASSIOPEIA_FA7KITCODE_DESC" filter="string" />
<!-- Header & Navigation UI -->
<field name="theme_sep_header" type="spacer" label="Header &amp; Navigation" hr="false" class="text fw-bold" />
<field name="stickyHeader" type="radio" label="TPL_MOKOCASSIOPEIA_STICKY_LABEL" layout="joomla.form.field.radio.switcher" default="0" filter="integer">
<option value="0">JNO</option>
<option value="1">JYES</option>
</field>
<field name="backTop" type="radio" label="TPL_MOKOCASSIOPEIA_BACKTOTOP_LABEL" layout="joomla.form.field.radio.switcher" default="0" filter="integer">
<option value="0">JNO</option>
<option value="1">JYES</option>
</field>
<!-- Toggle UI -->
<field name="theme_sep_toggle" type="spacer" label="Theme Toggle UI" hr="false" class="text fw-bold" />
<field name="theme_fab_enabled" type="radio" default="1"
label="TPL_MOKO_THEME_FAB_ENABLED" description="TPL_MOKO_THEME_FAB_ENABLED_DESC"
layout="joomla.form.field.radio.switcher" filter="boolean">
<option value="0">JNO</option>
<option value="1">JYES</option>
</field>
<field name="theme_fab_pos" type="list" default="br"
label="TPL_MOKO_THEME_FAB_POS" description="TPL_MOKO_THEME_FAB_POS_DESC">
<option value="br">Bottom-right</option>
<option value="bl">Bottom-left</option>
<option value="tr">Top-right</option>
<option value="tl">Top-left</option>
</field>
</fieldset>
<!-- CSS Variables reference tab -->
<fieldset name="css_variables" label="TPL_MOKOCASSIOPEIA_CSS_VARS_FIELDSET_LABEL">
<field name="css_vars_intro" type="note" description="TPL_MOKOCASSIOPEIA_CSS_VARS_INTRO" />
<field name="css_vars_brand" type="note" label="TPL_MOKOCASSIOPEIA_CSS_VARS_BRAND_LABEL" description="TPL_MOKOCASSIOPEIA_CSS_VARS_BRAND_DESC" class="alert alert-light" />
<field name="css_vars_links" type="note" label="TPL_MOKOCASSIOPEIA_CSS_VARS_LINKS_LABEL" description="TPL_MOKOCASSIOPEIA_CSS_VARS_LINKS_DESC" class="alert alert-light" />
<field name="css_vars_typography" type="note" label="TPL_MOKOCASSIOPEIA_CSS_VARS_TYPO_LABEL" description="TPL_MOKOCASSIOPEIA_CSS_VARS_TYPO_DESC" class="alert alert-light" />
<field name="css_vars_nav" type="note" label="TPL_MOKOCASSIOPEIA_CSS_VARS_NAV_LABEL" description="TPL_MOKOCASSIOPEIA_CSS_VARS_NAV_DESC" class="alert alert-light" />
<field name="css_vars_layout" type="note" label="TPL_MOKOCASSIOPEIA_CSS_VARS_LAYOUT_LABEL" description="TPL_MOKOCASSIOPEIA_CSS_VARS_LAYOUT_DESC" class="alert alert-light" />
<field name="css_vars_breakpoints" type="note" label="TPL_MOKOCASSIOPEIA_CSS_VARS_BP_LABEL" description="TPL_MOKOCASSIOPEIA_CSS_VARS_BP_DESC" class="alert alert-light" />
<field name="css_vars_bootstrap" type="note" label="TPL_MOKOCASSIOPEIA_CSS_VARS_BS_LABEL" description="TPL_MOKOCASSIOPEIA_CSS_VARS_BS_DESC" class="alert alert-light" />
<field name="css_vars_bootstrap_states" type="note" label="TPL_MOKOCASSIOPEIA_CSS_VARS_BS_STATES_LABEL" description="TPL_MOKOCASSIOPEIA_CSS_VARS_BS_STATES_DESC" class="alert alert-light" />
<field name="css_vars_alert_list" type="note" label="TPL_MOKOCASSIOPEIA_CSS_VARS_ALERT_LIST_LABEL" description="TPL_MOKOCASSIOPEIA_CSS_VARS_ALERT_LIST_DESC" class="alert alert-light" />
<field name="css_vars_colors" type="note" label="TPL_MOKOCASSIOPEIA_CSS_VARS_COLORS_LABEL" description="TPL_MOKOCASSIOPEIA_CSS_VARS_COLORS_DESC" class="alert alert-light" />
<field name="css_vars_header" type="note" label="TPL_MOKOCASSIOPEIA_CSS_VARS_HEADER_LABEL" description="TPL_MOKOCASSIOPEIA_CSS_VARS_HEADER_DESC" class="alert alert-light" />
<field name="css_vars_containers" type="note" label="TPL_MOKOCASSIOPEIA_CSS_VARS_CONTAINERS_LABEL" description="TPL_MOKOCASSIOPEIA_CSS_VARS_CONTAINERS_DESC" class="alert alert-light" />
<field name="css_vars_borders" type="note" label="TPL_MOKOCASSIOPEIA_CSS_VARS_BORDERS_LABEL" description="TPL_MOKOCASSIOPEIA_CSS_VARS_BORDERS_DESC" class="alert alert-light" />
<field name="css_vars_shadows" type="note" label="TPL_MOKOCASSIOPEIA_CSS_VARS_SHADOWS_LABEL" description="TPL_MOKOCASSIOPEIA_CSS_VARS_SHADOWS_DESC" class="alert alert-light" />
<field name="css_vars_forms" type="note" label="TPL_MOKOCASSIOPEIA_CSS_VARS_FORMS_LABEL" description="TPL_MOKOCASSIOPEIA_CSS_VARS_FORMS_DESC" class="alert alert-light" />
<field name="css_vars_buttons" type="note" label="TPL_MOKOCASSIOPEIA_CSS_VARS_BUTTONS_LABEL" description="TPL_MOKOCASSIOPEIA_CSS_VARS_BUTTONS_DESC" class="alert alert-light" />
<field name="css_vars_cards" type="note" label="TPL_MOKOCASSIOPEIA_CSS_VARS_CARDS_LABEL" description="TPL_MOKOCASSIOPEIA_CSS_VARS_CARDS_DESC" class="alert alert-light" />
<field name="css_vars_components" type="note" label="TPL_MOKOCASSIOPEIA_CSS_VARS_COMPONENTS_LABEL" description="TPL_MOKOCASSIOPEIA_CSS_VARS_COMPONENTS_DESC" class="alert alert-light" />
<field name="css_vars_virtuemart" type="note" label="TPL_MOKOCASSIOPEIA_CSS_VARS_VM_LABEL" description="TPL_MOKOCASSIOPEIA_CSS_VARS_VM_DESC" class="alert alert-light" />
<field name="css_vars_gable" type="note" label="TPL_MOKOCASSIOPEIA_CSS_VARS_GABLE_LABEL" description="TPL_MOKOCASSIOPEIA_CSS_VARS_GABLE_DESC" class="alert alert-light" />
</fieldset>
</fields>
</config>
</extension>