- Fixed CSS
- Cleaned up Table of Contents
- Deleted conflicting default.php in com_content
This commit is contained in:
2025-08-09 22:30:55 -05:00
parent 1c45469b99
commit 2e79807dbb
24 changed files with 14067 additions and 12448 deletions

View File

@@ -35,10 +35,10 @@ if ($paramsFontScheme) {
$wa->registerAndUseStyle('fontscheme.current', $paramsFontScheme, [], ['media' => 'print', 'rel' => 'lazy-stylesheet', 'onload' => 'this.media=\'all\'', 'crossorigin' => 'anonymous']);
if (preg_match_all('/family=([^?:]*):/i', $paramsFontScheme, $matches) > 0) {
$fontStyles = '--moko-cassiopeia-font-family-body: "' . str_replace('+', ' ', $matches[1][0]) . '", sans-serif;
--moko-cassiopeia-font-family-headings: "' . str_replace('+', ' ', isset($matches[1][1]) ? $matches[1][1] : $matches[1][0]) . '", sans-serif;
--moko-cassiopeia-font-weight-normal: 400;
--moko-cassiopeia-font-weight-headings: 700;';
$fontStyles = '--font-family-body: "' . str_replace('+', ' ', $matches[1][0]) . '", sans-serif;
--font-family-headings: "' . str_replace('+', ' ', isset($matches[1][1]) ? $matches[1][1] : $matches[1][0]) . '", sans-serif;
--font-weight-normal: 400;
--font-weight-headings: 700;';
}
} else {
$wa->registerAndUseStyle('fontscheme.current', $paramsFontScheme, ['version' => 'auto'], ['media' => 'print', 'rel' => 'lazy-stylesheet', 'onload' => 'this.media=\'all\'']);

View File

@@ -1,4 +1,16 @@
<?php
/**
* @package Joomla.Site
* @subpackage Templates.moko-cassiopeia
* @file /templates/moko-cassiopeia/custom.php
*
* @copyright © 2025 Moko Consulting — All Rights Reserved
* @license GNU General Public License version 2 or later; see LICENSE.txt
*
* Website: https://mokoconsulting.tech
* Email: hello@mokoconsulting.tech
* Phone: +1 (931) 279-6313
*/
function console_log($output, $with_script_tags = true) {
$js_code = 'console.log(' . json_encode($output, JSON_HEX_TAG) .
');';

View File

@@ -1,11 +1,15 @@
<?php
/**
* @package Joomla.Site
* @subpackage Templates.Moko-Cassiopeia
* @subpackage Templates.moko-cassiopeia
* @file /templates/moko-cassiopeia/error.php
*
* @copyright (C) 2017 Open Source Matters, Inc. <https://www.joomla.org>
* @copyright © 2025 Moko Consulting — All Rights Reserved
* @license GNU General Public License version 2 or later; see LICENSE.txt
*
* Website: https://mokoconsulting.tech
* Email: hello@mokoconsulting.tech
* Phone: +1 (931) 279-6313
*/
defined('_JEXEC') or die;
@@ -72,10 +76,10 @@ if ($paramsFontScheme) {
$wa->registerAndUseStyle('fontscheme.current', $paramsFontScheme, [], ['media' => 'print', 'rel' => 'lazy-stylesheet', 'onload' => 'this.media=\'all\'', 'crossorigin' => 'anonymous']);
if (preg_match_all('/family=([^?:]*):/i', $paramsFontScheme, $matches) > 0) {
$fontStyles = '--moko-cassiopeia-font-family-body: "' . str_replace('+', ' ', $matches[1][0]) . '", sans-serif;
--moko-cassiopeia-font-family-headings: "' . str_replace('+', ' ', isset($matches[1][1]) ? $matches[1][1] : $matches[1][0]) . '", sans-serif;
--moko-cassiopeia-font-weight-normal: 400;
--moko-cassiopeia-font-weight-headings: 700;';
$fontStyles = '--font-family-body: "' . str_replace('+', ' ', $matches[1][0]) . '", sans-serif;
--font-family-headings: "' . str_replace('+', ' ', isset($matches[1][1]) ? $matches[1][1] : $matches[1][0]) . '", sans-serif;
--font-weight-normal: 400;
--font-weight-headings: 700;';
}
} else {
$wa->registerAndUseStyle('fontscheme.current', $paramsFontScheme, ['version' => 'auto'], ['media' => 'print', 'rel' => 'lazy-stylesheet', 'onload' => 'this.media=\'all\'']);

View File

@@ -1,94 +0,0 @@
<?php
/**
* @package Joomla.Site
* @subpackage com_content
*
* @copyright (C) 2020 Open Source Matters, Inc. <https://www.joomla.org>
* @copyright (C) 2025 Jonathan Miler || Moko Consulting <https://mokoconsulting.tech>
* @license GNU General Public License version 2 or later; see LICENSE.txt
*/
defined('_JEXEC') or die;
use Joomla\CMS\HTML\HTMLHelper;
// Create shortcut
$urls = json_decode($this->item->urls);
// Create shortcuts to some parameters.
$params = $this->item->params;
if ($urls && (!empty($urls->urla) || !empty($urls->urlb) || !empty($urls->urlc))) :
?>
<div class="com-content-article__links content-links">
<ul class="com-content-article__links content-list">
<?php
$urlarray = [
[$urls->urla, $urls->urlatext, $urls->targeta, 'a'],
[$urls->urlb, $urls->urlbtext, $urls->targetb, 'b'],
[$urls->urlc, $urls->urlctext, $urls->targetc, 'c']
];
foreach ($urlarray as $url) :
$link = $url[0];
$label = $url[1];
$target = $url[2];
$id = $url[3];
if (! $link) :
continue;
endif;
// If no label is present, take the link
$label = $label ?: $link;
// If no target is present, use the default
$target = $target ?: $params->get('target' . $id);
?>
<li class="com-content-article__link content-links-<?php echo $id; ?>">
<?php
// Compute the correct link
switch ($target) {
case 1:
// Open in a new window
echo '<a href="' . htmlspecialchars($link, ENT_COMPAT, 'UTF-8') . '" target="_blank" rel="nofollow noopener noreferrer">' .
htmlspecialchars($label, ENT_COMPAT, 'UTF-8') . '</a>';
break;
case 2:
// Open in a popup window
$attribs = 'toolbar=no,location=no,status=no,menubar=no,scrollbars=yes,resizable=yes,width=600,height=600';
echo "<a href=\"" . htmlspecialchars($link, ENT_COMPAT, 'UTF-8') . "\" onclick=\"window.open(this.href, 'targetWindow', '" . $attribs . "'); return false;\" rel=\"noopener noreferrer\">" .
htmlspecialchars($label, ENT_COMPAT, 'UTF-8') . '</a>';
break;
case 3:
echo '<a href="' . htmlspecialchars($link, ENT_COMPAT, 'UTF-8') . '" rel="noopener noreferrer" data-bs-toggle="modal" data-bs-target="#linkModal">' .
htmlspecialchars($label, ENT_COMPAT, 'UTF-8') . ' </a>';
echo HTMLHelper::_(
'bootstrap.renderModal',
'linkModal',
[
'url' => $link,
'title' => $label,
'height' => '100%',
'width' => '100%',
'modalWidth' => '500',
'bodyHeight' => '500',
'footer' => '<button type="button" class="btn btn-secondary" data-bs-dismiss="modal" aria-hidden="true">'
. \Joomla\CMS\Language\Text::_('JLIB_HTML_BEHAVIOR_CLOSE') . '</button>'
]
);
break;
default:
// Open in parent window
echo '<a href="' . htmlspecialchars($link, ENT_COMPAT, 'UTF-8') . '" rel="nofollow">' .
htmlspecialchars($label, ENT_COMPAT, 'UTF-8') . ' </a>';
break;
}
?>
</li>
<?php endforeach; ?>
</ul>
</div>
<?php endif; ?>

View File

@@ -1,11 +1,15 @@
<?php
/**
* @package Joomla.Site
* @subpackage com_content
* @subpackage Templates.moko-cassiopeia
* @file \templates\moko-cassiopeia\html\com_content\article\toc-left.php
*
* @copyright (C) 2006 Open Source Matters, Inc. <https://www.joomla.org>
* © 2025 Moko Consulting All Rights Reserved
* @license GNU General Public License version 2 or later; see LICENSE.txt
*
* Website: https://mokoconsulting.tech
* Email: hello@mokoconsulting.tech
* Phone: +1 (931) 279-6313
*/
defined('_JEXEC') or die;
@@ -94,15 +98,21 @@ $isExpired = !is_null($this->item->publish_down) && $this->item->publish
if (!empty($this->item->pagination) && !$this->item->paginationposition && !$this->item->paginationrelative) :
echo $this->item->pagination;
endif;
?>
<?php if (isset($this->item->toc)) :
echo $this->item->toc;
endif; ?>
<div itemprop="articleBody" class="com-content-article__body">
<nav id="toc" data-toggle="toc"></nav>
?>
<div itemprop="articleBody" class="com-content-article__body">
<div class="container-toc-left">
<?php
echo $this->item->text; ?>
</div>
// Table of Contents header using template language string
echo '<h2>' . Text::_('TPL_MOKO-CASSIOPEIA_TOC') . '</h2>';
?>
<nav id="toc" data-toggle="toc"></nav>
</div>
<?php
echo $this->item->text;
?>
</div>
<?php if ($info == 1 || $info == 2) : ?>
<?php if ($useDefList) : ?>

View File

@@ -1,11 +1,15 @@
<?php
/**
* @package Joomla.Site
* @subpackage com_content
* @subpackage Templates.moko-cassiopeia
* @file \templates\moko-cassiopeia\html\com_content\article\toc-right.php
*
* @copyright (C) 2006 Open Source Matters, Inc. <https://www.joomla.org>
* © 2025 Moko Consulting All Rights Reserved
* @license GNU General Public License version 2 or later; see LICENSE.txt
*
* Website: https://mokoconsulting.tech
* Email: hello@mokoconsulting.tech
* Phone: +1 (931) 279-6313
*/
defined('_JEXEC') or die;
@@ -94,14 +98,23 @@ $isExpired = !is_null($this->item->publish_down) && $this->item->publish
if (!empty($this->item->pagination) && !$this->item->paginationposition && !$this->item->paginationrelative) :
echo $this->item->pagination;
endif;
?>
<?php if (isset($this->item->toc)) :
echo $this->item->toc;
endif; ?>
<div itemprop="articleBody" class="com-content-article__body">
?>
<div itemprop="articleBody" class="com-content-article__body">
<div class="container-toc-right">
<?php
// Table of Contents header using template language string
echo '<h2>' . Text::_('TPL_MOKO-CASSIOPEIA_TOC') . '</h2>';
?>
<nav id="toc" data-toggle="toc"></nav>
</div>
<?php
echo $this->item->text;
?>
</div>
<?php echo $this->item->text; ?>
</div>
<?php if ($info == 1 || $info == 2) : ?>
<?php if ($useDefList) : ?>

View File

@@ -1,11 +1,14 @@
<?php
/**
* @package Joomla.Site
* @subpackage Templates.Moko-Cassiopeia
* @subpackage Templates.moko-cassiopeia
*
* @copyright (C) 2017 Open Source Matters, Inc. <https://www.joomla.org>
* @copyright © 2025 Moko Consulting — All Rights Reserved
* @license GNU General Public License version 2 or later; see LICENSE.txt
*
* Website: https://mokoconsulting.tech
* Email: hello@mokoconsulting.tech
* Phone: +1 (931) 279-6313
*/
defined('_JEXEC') or die;
@@ -20,32 +23,31 @@ use Joomla\CMS\Uri\Uri;
$app = Factory::getApplication();
$input = $app->getInput();
$wa = $this->getWebAssetManager();
$params_developmentmode = $this->params->get('developmentmode', false);
$params_ColorName = $this->params->get('colorName', 'colors_standard');
$params_GoogleTagManager = $this->params->get('googletagmanager', false);
$params_GoogleTagManagerID = $this->params->get('googletagmanagerid', null);
if ($params_developmentmode) {
$params_googletagmanager = true;
$params_googletagmanagerid = "GTM-WX6W2ZVB
";
$params_googleanalytics = true;
$params_googleanalyticsid = "G-NJ6Z5NWZST";
} else {
$params_googletagmanager = $this->params->get('googletagmanager', false);
$params_googletagmanagerid = $this->params->get('googletagmanagerid', null);
$params_googleanalytics = $this->params->get('googleanalytics', false);
$params_googleanalyticsid = $this->params->get('googleanalyticsid', null);
}
$params_custom_head_start = $this->params->get('custom_head_start', null);
$params_custom_head_end = $this->params->get('custom_head_end', null);
$params_leftIcon = htmlspecialchars(
$this->params->get('drawerLeftIcon', 'fa-solid fa-chevron-left'),
ENT_COMPAT, 'UTF-8'
$this->params->get('drawerLeftIcon', 'fa-solid fa-chevron-left'),
ENT_COMPAT, 'UTF-8'
);
$params_rightIcon = htmlspecialchars(
$this->params->get('drawerRightIcon', 'fa-solid fa-chevron-right'),
ENT_COMPAT, 'UTF-8'
$this->params->get('drawerRightIcon', 'fa-solid fa-chevron-right'),
ENT_COMPAT, 'UTF-8'
);
if ($params_GoogleTagManager && $params_GoogleTagManagerID) {
?>
<!-- Google Tag Manager -->
<script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
})(window,document,'script','dataLayer','<?php echo $params_GoogleTagManagerID;?>');</script>
<!-- End Google Tag Manager -->
<?php
}
// Add Bootstrap 5 Support
HTMLHelper::_('bootstrap.framework');
HTMLHelper::_('bootstrap.loadCss', true);
@@ -84,41 +86,41 @@ $params_FontScheme = $this->params->get('useFontScheme', false);
$fontStyles = '';
if ($params_FontScheme) {
if (stripos($params_FontScheme, 'https://') === 0) {
$this->getPreloadManager()->preconnect('https://fonts.googleapis.com/', ['crossorigin' => 'anonymous']);
$this->getPreloadManager()->preconnect('https://fonts.gstatic.com/', ['crossorigin' => 'anonymous']);
$this->getPreloadManager()->preload($params_FontScheme, ['as' => 'style', 'crossorigin' => 'anonymous']);
$wa->registerAndUseStyle('fontscheme.current', $params_FontScheme, [], ['media' => 'print', 'rel' => 'lazy-stylesheet', 'onload' => 'this.media=\'all\'', 'crossorigin' => 'anonymous']);
if (stripos($params_FontScheme, 'https://') === 0) {
$this->getPreloadManager()->preconnect('https://fonts.googleapis.com/', ['crossorigin' => 'anonymous']);
$this->getPreloadManager()->preconnect('https://fonts.gstatic.com/', ['crossorigin' => 'anonymous']);
$this->getPreloadManager()->preload($params_FontScheme, ['as' => 'style', 'crossorigin' => 'anonymous']);
$wa->registerAndUseStyle('fontscheme.current', $params_FontScheme, [], ['media' => 'print', 'rel' => 'lazy-stylesheet', 'onload' => 'this.media=\'all\'', 'crossorigin' => 'anonymous']);
if (preg_match_all('/family=([^?:]*):/i', $params_FontScheme, $matches) > 0) {
$fontStyles = '--moko-cassiopeia-font-family-body: "' . str_replace('+', ' ', $matches[1][0]) . '", sans-serif;\n';
$fontStyles .= '--moko-cassiopeia-font-family-headings: "' . str_replace('+', ' ', isset($matches[1][1]) ? $matches[1][1] : $matches[1][0]) . '", sans-serif;\n';
$fontStyles .= '--moko-cassiopeia-font-weight-normal: 400;\n';
$fontStyles .= '--moko-cassiopeia-font-weight-headings: 700;';
}
} else {
$wa->registerAndUseStyle('fontscheme.current', $params_FontScheme, ['version' => 'auto'], ['media' => 'print', 'rel' => 'lazy-stylesheet', 'onload' => 'this.media=\'all\'']);
$this->getPreloadManager()->preload($wa->getAsset('style', 'fontscheme.current')->getUri() . '?' . $this->getMediaVersion(), ['as' => 'style']);
}
if (preg_match_all('/family=([^?:]*):/i', $params_FontScheme, $matches) > 0) {
$fontStyles = '--font-family-body: "' . str_replace('+', ' ', $matches[1][0]) . '", sans-serif;\n';
$fontStyles .= '--font-family-headings: "' . str_replace('+', ' ', isset($matches[1][1]) ? $matches[1][1] : $matches[1][0]) . '", sans-serif;\n';
$fontStyles .= '--font-weight-normal: 400;\n';
$fontStyles .= '--font-weight-headings: 700;';
}
} else {
$wa->registerAndUseStyle('fontscheme.current', $params_FontScheme, ['version' => 'auto'], ['media' => 'print', 'rel' => 'lazy-stylesheet', 'onload' => 'this.media=\'all\'']);
$this->getPreloadManager()->preload($wa->getAsset('style', 'fontscheme.current')->getUri() . '?' . $this->getMediaVersion(), ['as' => 'style']);
}
}
// Enable assets
$wa->usePreset('template.MOKO-CASSIOPEIA.' . ($this->direction === 'rtl' ? 'rtl' : 'ltr'))
->useStyle('template.active.language')
->useStyle('template.user')
->useScript('template.user')
->addInlineStyle(":root {\n --hue: 214;\n --template-bg-light: #f0f4fb;\n --template-text-dark: #495057;\n --template-text-light: #ffffff;\n --template-link-color: #2a69b8;\n --template-special-color: #001B4C;\n $fontStyles\n }");
->useStyle('template.active.language')
->useStyle('template.user')
->useScript('template.user')
->addInlineStyle(":root {\n --hue: 214;\n --template-bg-light: #f0f4fb;\n --template-text-dark: #495057;\n --template-text-light: #ffffff;\n --template-link-color: #2a69b8;\n --template-special-color: #001B4C;\n $fontStyles\n }");
// Override 'template.active' asset for correct dependency
$wa->registerStyle('template.active', '', [], [], ['template.MOKO-CASSIOPEIA.' . ($this->direction === 'rtl' ? 'rtl' : 'ltr')]);
// Logo file or site title
if ($this->params->get('logoFile')) {
$logo = HTMLHelper::_('image', Uri::root(false) . htmlspecialchars($this->params->get('logoFile'), ENT_QUOTES), $sitename, ['loading' => 'eager', 'decoding' => 'async'], false, 0);
$logo = HTMLHelper::_('image', Uri::root(false) . htmlspecialchars($this->params->get('logoFile'), ENT_QUOTES), $sitename, ['loading' => 'eager', 'decoding' => 'async'], false, 0);
} elseif ($this->params->get('siteTitle')) {
$logo = '<span title="' . $sitename . '">' . htmlspecialchars($this->params->get('siteTitle'), ENT_COMPAT, 'UTF-8') . '</span>';
$logo = '<span title="' . $sitename . '">' . htmlspecialchars($this->params->get('siteTitle'), ENT_COMPAT, 'UTF-8') . '</span>';
} else {
$logo = HTMLHelper::_('image', 'full_logo.png', $sitename, ['class' => 'logo d-inline-block', 'loading' => 'eager', 'decoding' => 'async'], true, 0);
$logo = HTMLHelper::_('image', 'full_logo.png', $sitename, ['class' => 'logo d-inline-block', 'loading' => 'eager', 'decoding' => 'async'], true, 0);
}
$hasClass = '';
@@ -137,10 +139,10 @@ $this->setMetaData('viewport', 'width=device-width, initial-scale=1');
$stickyHeader = $this->params->get('stickyHeader') ? 'position-sticky sticky-top' : '';
if ($this->params->get('fA6KitCode')) {
$fa6Kit = "https://kit.fontawesome.com/" . $this->params->get('fA6KitCode') . ".js";
JHtml::_('script', $fa6Kit, ['crossorigin' => 'anonymous']);
$fa6Kit = "https://kit.fontawesome.com/" . $this->params->get('fA6KitCode') . ".js";
JHtml::_('script', $fa6Kit, ['crossorigin' => 'anonymous']);
} else {
$wa->getAsset('style', 'fontawesome')->setAttribute('rel', 'lazy-stylesheet');
$wa->getAsset('style', 'fontawesome')->setAttribute('rel', 'lazy-stylesheet');
}
// Add Bootstrap TOC CSS
$this->addStyleSheet($templatePath . '/css/vendor/afeld/bootstrap-toc.min.css');
@@ -152,183 +154,245 @@ $this->addScript($templatePath . '/js/vendor/afeld/bootstrap-toc.min.js');
<!DOCTYPE html>
<html lang="<?php echo $this->language; ?>" dir="<?php echo $this->direction; ?>">
<head>
<?php if (trim($params_custom_head_start)) : ?><?php echo $params_custom_head_start; ?><?php endif; ?>
<jdoc:include type="head" />
<script>
<?php if (trim($params_custom_head_start)) : ?><?php echo $params_custom_head_start; ?><?php endif; ?>
<jdoc:include type="head" />
<script>
window.addEventListener('DOMContentLoaded', function () {
var ua = navigator.userAgent || navigator.vendor || window.opera;
var isFacebookBrowser = ua.indexOf('FBAN') > -1 || ua.indexOf('FBAV') > -1;
var ua = navigator.userAgent || navigator.vendor || window.opera;
var isFacebookBrowser = ua.indexOf('FBAN') > -1 || ua.indexOf('FBAV') > -1;
if (isFacebookBrowser) {
var warning = document.createElement('div');
warning.textContent = '⚠️ KNOWN ISSUE: Images do not load in Facebook Web browser. Please open in external browser for full experience.';
warning.style.position = 'fixed';
warning.style.top = '0';
warning.style.left = '0';
warning.style.right = '0';
warning.style.zIndex = '10000';
warning.style.backgroundColor = '#007bff'; // Blue background
warning.style.color = '#fff';
warning.style.padding = '15px';
warning.style.textAlign = 'center';
warning.style.fontWeight = 'bold';
warning.style.fontSize = '16px';
warning.style.boxShadow = '0 2px 5px rgba(0,0,0,0.2)';
if (isFacebookBrowser) {
var warning = document.createElement('div');
warning.textContent = '⚠️ KNOWN ISSUE: Images do not load in Facebook Web browser. Please open in external browser for full experience.';
warning.style.position = 'fixed';
warning.style.top = '0';
warning.style.left = '0';
warning.style.right = '0';
warning.style.zIndex = '10000';
warning.style.backgroundColor = '#007bff'; // Blue background
warning.style.color = '#fff';
warning.style.padding = '15px';
warning.style.textAlign = 'center';
warning.style.fontWeight = 'bold';
warning.style.fontSize = '16px';
warning.style.boxShadow = '0 2px 5px rgba(0,0,0,0.2)';
document.body.appendChild(warning);
}
document.body.appendChild(warning);
}
});
</script>
<?php if (trim($params_custom_head_end)) : ?><?php echo $params_custom_head_end; ?><?php endif; ?>
<?php if (trim($params_custom_head_end)) : ?><?php echo $params_custom_head_end; ?><?php endif; ?>
</head>
<body data-bs-spy="scroll" data-bs-target="#toc" class="site <?php echo $option . ' ' . $wrapper . ' view-' . $view . ($layout ? ' layout-' . $layout : ' no-layout') . ($task ? ' task-' . $task : ' no-task') . ($itemid ? ' itemid-' . $itemid : '') . ($pageclass ? ' ' . $pageclass : '') . $hasClass . ($this->direction == 'rtl' ? ' rtl' : ''); ?>">
<?php if ($params_GoogleTagManager && $params_GoogleTagManagerID) : ?>
<!-- Google Tag Manager (noscript) -->
<noscript><iframe src="https://www.googletagmanager.com/ns.html?id=<?php echo $params_GoogleTagManagerID; ?>" height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
<!-- End Google Tag Manager (noscript) -->
<?php
if (!empty($params_googletagmanager) && !empty($params_googletagmanagerid)) :
$gtmID = htmlspecialchars($params_googletagmanagerid, ENT_QUOTES, 'UTF-8');
?>
<!-- Google Tag Manager -->
<script>
(function(w,d,s,l,i){
w[l]=w[l]||[];
w[l].push({'gtm.start': new Date().getTime(), event:'gtm.js'});
var f=d.getElementsByTagName(s)[0],
j=d.createElement(s),
dl=l!='dataLayer'?'&l='+l:'';
j.async=true;
j.src='https://www.googletagmanager.com/gtm.js?id='+i+dl;
f.parentNode.insertBefore(j,f);
})(window,document,'script','dataLayer','<?php echo $gtmID; ?>');
</script>
<!-- End Google Tag Manager -->
<!-- Google Tag Manager (noscript) -->
<noscript>
<iframe src="https://www.googletagmanager.com/ns.html?id=<?php echo $gtmID; ?>"
height="0" width="0" style="display:none;visibility:hidden"></iframe>
</noscript>
<!-- End Google Tag Manager (noscript) -->
<?php
endif;
if (!empty($params_googleanalytics) && !empty($params_googleanalyticsid)) :
$gaId = htmlspecialchars($params_googleanalyticsid, ENT_QUOTES, 'UTF-8');
?>
<!-- Google Analytics (gtag.js) -->
<script async src="https://www.googletagmanager.com/gtag/js?id=<?php echo $gaId; ?>"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
// Optional: Consent Mode defaults (adjust to your needs or remove)
gtag('consent', 'default', {
'ad_storage': 'denied',
'analytics_storage': 'granted',
'ad_user_data': 'denied',
'ad_personalization': 'denied'
});
// GA4 vs UA fallback
(function(id){
if (/^G-/.test(id)) {
// GA4
gtag('config', id, {
'anonymize_ip': true
});
} else if (/^UA-/.test(id)) {
// Legacy Universal Analytics (sunset by Google, kept for backward compat)
gtag('config', id, {
'anonymize_ip': true
});
console.warn('Using a UA- ID. Universal Analytics is sunset; consider migrating to GA4.');
} else {
console.warn('Unrecognized Google Analytics ID format:', id);
}
})('<?php echo $gaId; ?>');
</script>
<!-- End Google Analytics -->
<?php endif; ?>
<header class="header container-header full-width<?php echo $stickyHeader ? ' ' . $stickyHeader : ''; ?>">
<?php if ($this->countModules('topbar')) : ?>
<div class="container-topbar">
<jdoc:include type="modules" name="topbar" style="none" />
</div>
<?php endif; ?>
<?php if ($this->countModules('topbar')) : ?>
<div class="container-topbar">
<jdoc:include type="modules" name="topbar" style="none" />
</div>
<?php endif; ?>
<div class="header-top">
<?php if ($this->countModules('below-top')) : ?>
<div class="grid-child container-below-top">
<jdoc:include type="modules" name="below-top" style="none" />
</div>
<?php endif; ?>
<div class="header-top">
<?php if ($this->countModules('below-topbar')) : ?>
<div class="grid-child container-below-topbar">
<jdoc:include type="modules" name="below-topbar" style="none" />
</div>
<?php endif; ?>
<?php if ($this->params->get('brand', 1)) : ?>
<div class="grid-child">
<div class="navbar-brand">
<a class="brand-logo" href="<?php echo $this->baseurl; ?>/">
<?php echo $logo; ?>
</a>
<?php if ($this->params->get('siteDescription')) : ?>
<div class="site-description"><?php echo htmlspecialchars($this->params->get('siteDescription')); ?></div>
<?php endif; ?>
</div>
</div>
<?php endif; ?>
<?php if ($this->params->get('brand', 1)) : ?>
<div class="grid-child">
<div class="navbar-brand">
<a class="brand-logo" href="<?php echo $this->baseurl; ?>/">
<?php echo $logo; ?>
</a>
<?php if ($this->params->get('siteDescription')) : ?>
<div class="site-description"><?php echo htmlspecialchars($this->params->get('siteDescription')); ?></div>
<?php endif; ?>
</div>
</div>
<?php endif; ?>
<?php if ($this->countModules('below-logo')) : ?>
<div class="grid container-below-logo">
<jdoc:include type="modules" name="below-logo" style="none" />
</div>
<?php endif; ?>
</div>
<?php if ($this->countModules('below-logo')) : ?>
<div class="grid container-below-logo">
<jdoc:include type="modules" name="below-logo" style="none" />
</div>
<?php endif; ?>
</div>
<!-- Drawer Toggle Buttons -->
<!-- Drawer Toggle Buttons -->
<?php if ($this->countModules('drawer-left')) : ?>
<button class="drawer-toggle-left btn btn-outline-secondary me-2"
type="button"
data-bs-toggle="offcanvas"
data-bs-target="#drawer-left"
aria-controls="drawer-left">
<span class="<?php echo $params_leftIcon; ?>"></span>
type="button"
data-bs-toggle="offcanvas"
data-bs-target="#drawer-left"
aria-controls="drawer-left">
<span class="<?php echo $params_leftIcon; ?>"></span>
</button>
<?php endif; ?>
<?php if ($this->countModules('drawer-right')) : ?>
<button class="drawer-toggle-right btn btn-outline-secondary"
type="button"
data-bs-toggle="offcanvas"
data-bs-target="#drawer-right"
aria-controls="drawer-right">
<span class="<?php echo $params_rightIcon; ?>"></span>
type="button"
data-bs-toggle="offcanvas"
data-bs-target="#drawer-right"
aria-controls="drawer-right">
<span class="<?php echo $params_rightIcon; ?>"></span>
</button>
<?php endif; ?>
<?php if ($this->countModules('menu', true) || $this->countModules('search', true)) : ?>
<div class="grid-child container-nav">
<?php if ($this->countModules('menu', true)) : ?>
<jdoc:include type="modules" name="menu" style="none" />
<?php endif; ?>
<?php if ($this->countModules('search', true)) : ?>
<div class="container-search">
<jdoc:include type="modules" name="search" style="none" />
</div>
<?php endif; ?>
</div>
<?php endif; ?>
<?php if ($this->countModules('menu', true) || $this->countModules('search', true)) : ?>
<div class="grid-child container-nav">
<?php if ($this->countModules('menu', true)) : ?>
<jdoc:include type="modules" name="menu" style="none" />
<?php endif; ?>
<?php if ($this->countModules('search', true)) : ?>
<div class="container-search">
<jdoc:include type="modules" name="search" style="none" />
</div>
<?php endif; ?>
</div>
<?php endif; ?>
</header>
<div class="site-grid">
<?php if ($this->countModules('banner', true)) : ?>
<div class="container-banner full-width">
<jdoc:include type="modules" name="banner" style="none" />
</div>
<?php endif; ?>
<?php if ($this->countModules('banner', true)) : ?>
<div class="container-banner full-width">
<jdoc:include type="modules" name="banner" style="none" />
</div>
<?php endif; ?>
<?php if ($this->countModules('top-a', true)) : ?>
<div class="grid-child container-top-a">
<jdoc:include type="modules" name="top-a" style="card" />
</div>
<?php endif; ?>
<?php if ($this->countModules('top-a', true)) : ?>
<div class="grid-child container-top-a">
<jdoc:include type="modules" name="top-a" style="card" />
</div>
<?php endif; ?>
<?php if ($this->countModules('top-b', true)) : ?>
<div class="grid-child container-top-b">
<jdoc:include type="modules" name="top-b" style="card" />
</div>
<?php endif; ?>
<?php if ($this->countModules('top-b', true)) : ?>
<div class="grid-child container-top-b">
<jdoc:include type="modules" name="top-b" style="card" />
</div>
<?php endif; ?>
<?php if ($this->countModules('sidebar-left', true)) : ?>
<div class="grid-child container-sidebar-left">
<jdoc:include type="modules" name="sidebar-left" style="card" />
</div>
<?php endif; ?>
<?php if ($this->countModules('sidebar-left', true)) : ?>
<div class="grid-child container-sidebar-left">
<jdoc:include type="modules" name="sidebar-left" style="card" />
</div>
<?php endif; ?>
<div class="grid-child container-component">
<jdoc:include type="modules" name="breadcrumbs" style="none" />
<jdoc:include type="modules" name="main-top" style="card" />
<jdoc:include type="message" />
<main>
<jdoc:include type="component" />
</main>
<jdoc:include type="modules" name="main-bottom" style="card" />
</div>
<div class="grid-child container-component">
<jdoc:include type="modules" name="breadcrumbs" style="none" />
<jdoc:include type="modules" name="main-top" style="card" />
<jdoc:include type="message" />
<main>
<jdoc:include type="component" />
</main>
<jdoc:include type="modules" name="main-bottom" style="card" />
</div>
<?php if ($this->countModules('sidebar-right', true)) : ?>
<div class="grid-child container-sidebar-right">
<jdoc:include type="modules" name="sidebar-right" style="card" />
</div>
<?php endif; ?>
<?php if ($this->countModules('sidebar-right', true)) : ?>
<div class="grid-child container-sidebar-right">
<jdoc:include type="modules" name="sidebar-right" style="card" />
</div>
<?php endif; ?>
<?php if ($this->countModules('bottom-a', true)) : ?>
<div class="grid-child container-bottom-a">
<jdoc:include type="modules" name="bottom-a" style="card" />
</div>
<?php endif; ?>
<?php if ($this->countModules('bottom-a', true)) : ?>
<div class="grid-child container-bottom-a">
<jdoc:include type="modules" name="bottom-a" style="card" />
</div>
<?php endif; ?>
<?php if ($this->countModules('bottom-b', true)) : ?>
<div class="grid-child container-bottom-b">
<jdoc:include type="modules" name="bottom-b" style="card" />
</div>
<?php endif; ?>
<?php if ($this->countModules('bottom-b', true)) : ?>
<div class="grid-child container-bottom-b">
<jdoc:include type="modules" name="bottom-b" style="card" />
</div>
<?php endif; ?>
</div>
<footer class="container-footer footer full-width">
<?php if ($this->countModules('footer-menu', true)) : ?>
<div class="grid-child footer-menu">
<jdoc:include type="modules" name="footer-menu" />
</div>
<?php endif; ?>
<?php if ($this->countModules('footer', true)) : ?>
<div class="grid-child">
<jdoc:include type="modules" name="footer" style="none" />
</div>
<?php endif; ?>
<?php if ($this->countModules('footer-menu', true)) : ?>
<div class="grid-child footer-menu">
<jdoc:include type="modules" name="footer-menu" />
</div>
<?php endif; ?>
<?php if ($this->countModules('footer', true)) : ?>
<div class="grid-child">
<jdoc:include type="modules" name="footer" style="none" />
</div>
<?php endif; ?>
</footer>
<?php if ($this->params->get('backTop') == 1) : ?>
<a href="#top" id="back-top" class="back-to-top-link" aria-label="<?php echo Text::_('TPL_MOKO-CASSIOPEIA_BACKTOTOP'); ?>">
<span class="icon-arrow-up icon-fw" aria-hidden="true"></span>
</a>
<a href="#top" id="back-top" class="back-to-top-link" aria-label="<?php echo Text::_('TPL_MOKO-CASSIOPEIA_BACKTOTOP'); ?>">
<span class="icon-arrow-up icon-fw" aria-hidden="true"></span>
</a>
<?php endif; ?>
<?php if ($this->countModules('drawer-left', true)) : ?>
@@ -336,10 +400,10 @@ $this->addScript($templatePath . '/js/vendor/afeld/bootstrap-toc.min.js');
<aside class="offcanvas offcanvas-start" tabindex="-1" id="drawer-left">
<div class="offcanvas-header">
<button type="button" class="btn-close text-reset" data-bs-dismiss="offcanvas" aria-label="<?php echo Text::_('JLIB_HTML_BEHAVIOR_CLOSE'); ?>"></button>
<button type="button" class="btn-close text-reset" data-bs-dismiss="offcanvas" aria-label="<?php echo Text::_('JLIB_HTML_BEHAVIOR_CLOSE'); ?>"></button>
</div>
<div class="offcanvas-body">
<jdoc:include type="modules" name="drawer-left" style="none" />
<jdoc:include type="modules" name="drawer-left" style="none" />
</div>
</aside>
<?php endif; ?>
@@ -349,10 +413,10 @@ $this->addScript($templatePath . '/js/vendor/afeld/bootstrap-toc.min.js');
<aside class="offcanvas offcanvas-end" tabindex="-1" id="drawer-right">
<div class="offcanvas-header">
<button type="button" class="btn-close text-reset" data-bs-dismiss="offcanvas" aria-label="<?php echo Text::_('JLIB_HTML_BEHAVIOR_CLOSE'); ?>"></button>
<button type="button" class="btn-close text-reset" data-bs-dismiss="offcanvas" aria-label="<?php echo Text::_('JLIB_HTML_BEHAVIOR_CLOSE'); ?>"></button>
</div>
<div class="offcanvas-body">
<jdoc:include type="modules" name="drawer-right" style="none" />
<jdoc:include type="modules" name="drawer-right" style="none" />
</div>
</aside>
<?php endif; ?>

View File

@@ -1,11 +1,15 @@
<?php
/**
* @package Joomla.Site
* @subpackage Templates.Moko-Cassiopeia
* @subpackage Templates.moko-cassiopeia
* @file /templates/moko-cassiopeia/offline.php
*
* @copyright (C) 2017 Open Source Matters, Inc. <https://www.joomla.org>
* @copyright © 2025 Moko Consulting — All Rights Reserved
* @license GNU General Public License version 2 or later; see LICENSE.txt
*
* Website: https://mokoconsulting.tech
* Email: hello@mokoconsulting.tech
* Phone: +1 (931) 279-6313
*/
defined('_JEXEC') or die;
@@ -50,10 +54,10 @@ if ($paramsFontScheme) {
$wa->registerAndUseStyle('fontscheme.current', $paramsFontScheme, [], ['media' => 'print', 'rel' => 'lazy-stylesheet', 'onload' => 'this.media=\'all\'', 'crossorigin' => 'anonymous']);
if (preg_match_all('/family=([^?:]*):/i', $paramsFontScheme, $matches) > 0) {
$fontStyles = '--moko-cassiopeia-font-family-body: "' . str_replace('+', ' ', $matches[1][0]) . '", sans-serif;
--moko-cassiopeia-font-family-headings: "' . str_replace('+', ' ', isset($matches[1][1]) ? $matches[1][1] : $matches[1][0]) . '", sans-serif;
--moko-cassiopeia-font-weight-normal: 400;
--moko-cassiopeia-font-weight-headings: 700;';
$fontStyles = '--font-family-body: "' . str_replace('+', ' ', $matches[1][0]) . '", sans-serif;
--font-family-headings: "' . str_replace('+', ' ', isset($matches[1][1]) ? $matches[1][1] : $matches[1][0]) . '", sans-serif;
--font-weight-normal: 400;
--font-weight-headings: 700;';
}
} else {
$wa->registerAndUseStyle('fontscheme.current', $paramsFontScheme, ['version' => 'auto'], ['media' => 'print', 'rel' => 'lazy-stylesheet', 'onload' => 'this.media=\'all\'']);

View File

@@ -1,11 +1,23 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--
@package Joomla.Site
@subpackage Templates.moko-cassiopeia
@file /templates/moko-cassiopeia/templateDetails.xml
© 2025 Moko Consulting — All Rights Reserved
@license GNU General Public License version 2 or later; see LICENSE.txt
Website: https://mokoconsulting.tech
Email: hello@mokoconsulting.tech
Phone: +1 (931) 279-6313
-->
<extension type="template" client="site" method="upgrade">
<updateservers>
<server type="extension" name="Moko Consulting">https://mokoconsulting.tech/updates/updates.xml</server>
<server type="extension" name="Moko Consulting">https://mokoconsulting.tech/updates/updates.xml</server>
</updateservers>
<name>moko-cassiopeia</name>
<version>1.12</version>
<creationDate>2023-05</creationDate>
<version>1.13</version>
<creationDate>2025-08-09</creationDate>
<author>Jonathan Miller || Moko Consulting</author>
<authorEmail>jmiller@mokoconsulting.tech</authorEmail>
<copyright>(C)GNU General Public License Version 2 - 2025 Moko Consulting</copyright>
@@ -28,7 +40,7 @@
</media>
<positions>
<position>topbar</position>
<position>below-top</position>
<position>below-topbar</position>
<position>below-logo</position>
<position>menu</position>
<position>search</position>
@@ -60,194 +72,99 @@
<config>
<fields name="params">
<fieldset name="advanced">
<field
name="brand"
type="radio"
label="TPL_MOKO-CASSIOPEIA_BRAND_LABEL"
default="1"
layout="joomla.form.field.radio.switcher"
filter="boolean"
>
<field name="developmentmode" type="radio" label="TPL_MOKO-CASSIOPEIA_DEVELOPMENTMODE_LABEL"
description="TPL_MOKO-CASSIOPEIA_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="logoFile"
type="media"
default="media/templates/site/moko-cassiopeia/images/logo.svg"
label="TPL_MOKO-CASSIOPEIA_LOGO_LABEL"
showon="brand:1"
/>
<field
name="siteTitle"
type="text"
default=""
label="TPL_MOKO-CASSIOPEIA_TITLE"
filter="string"
showon="brand:1"
/>
<field
name="siteDescription"
type="text"
default=""
label="TPL_MOKO-CASSIOPEIA_TAGLINE_LABEL"
description="TPL_MOKO-CASSIOPEIA_TAGLINE_DESC"
filter="string"
showon="brand:1"
/>
<field
name="fA6KitCode"
type="text"
default=""
label="TPL_MOKO-CASSIOPEIA_FA6KITCODE_LABEL"
description="TPL_MOKO-CASSIOPEIA_FA6KITCODE_DESC"
filter="string"
/>
<field
name="offlineEmbed"
type="text"
default=""
label="TPL_MOKO-CASSIOPEIA_OFFLINEEMBED_LABEL"
description="TPL_MOKO-CASSIOPEIA_OFFLINEEMBED_DESC"
filter="raw"
/>
<field
name="useFontScheme"
type="groupedlist"
label="TPL_MOKO-CASSIOPEIA_FONT_LABEL"
default="0"
>
<field name="brand" type="radio" label="TPL_MOKO-CASSIOPEIA_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" default="media/templates/site/moko-cassiopeia/images/logo.svg"
label="TPL_MOKO-CASSIOPEIA_LOGO_LABEL" showon="brand:1" />
<field name="siteTitle" type="text" default="" label="TPL_MOKO-CASSIOPEIA_TITLE"
filter="string" showon="brand:1" />
<field name="siteDescription" type="text" default="" label="TPL_MOKO-CASSIOPEIA_TAGLINE_LABEL"
description="TPL_MOKO-CASSIOPEIA_TAGLINE_DESC" filter="string" showon="brand:1" />
<field name="fA6KitCode" type="text" default="" label="TPL_MOKO-CASSIOPEIA_FA6KITCODE_LABEL"
description="TPL_MOKO-CASSIOPEIA_FA6KITCODE_DESC" filter="string" />
<field name="offlineEmbed" type="text" default="" label="TPL_MOKO-CASSIOPEIA_OFFLINEEMBED_LABEL"
description="TPL_MOKO-CASSIOPEIA_OFFLINEEMBED_DESC" filter="raw" />
<field name="useFontScheme" type="groupedlist" label="TPL_MOKO-CASSIOPEIA_FONT_LABEL"
default="0">
<option value="0">JNONE</option>
<group label="TPL_MOKO-CASSIOPEIA_FONT_GROUP_LOCAL">
<option value="media/templates/site/moko-cassiopeia/css/global/fonts-local_roboto.css">Roboto (local)</option>
<option value="media/templates/site/moko-cassiopeia/css/global/fonts-local_roboto.css">Roboto
(local)</option>
</group>
<group label="TPL_MOKO-CASSIOPEIA_FONT_GROUP_WEB">
<option value="https://fonts.googleapis.com/css2?family=Fira+Sans:wght@100;300;400;700&amp;display=swap">Fira Sans (web)</option>
<option value="https://fonts.googleapis.com/css2?family=Noto+Sans:wght@100;300;400;700&amp;family=Roboto:wght@100;300;400;700&amp;display=swap">Roboto + Noto Sans (web)</option>
<option value="https://fonts.googleapis.com/css2?family=Fira+Sans:wght@100;300;400;700&amp;display=swap">Fira
Sans (web)</option>
<option value="https://fonts.googleapis.com/css2?family=Noto+Sans:wght@100;300;400;700&amp;family=Roboto:wght@100;300;400;700&amp;display=swap">Roboto
+ Noto Sans (web)</option>
</group>
</field>
<field
name="noteFontScheme"
type="note"
description="TPL_MOKO-CASSIOPEIA_FONT_NOTE_TEXT"
class="alert alert-warning"
/>
<field
name="colorName"
type="filelist"
label="TPL_MOKO-CASSIOPEIA_COLOR_NAME_LABEL"
default="colors_standard"
fileFilter="^custom.+[^min]\.css$"
exclude="^colors.+"
stripext="true"
hide_none="true"
hide_default="true"
directory="media/templates/site/moko-cassiopeia/css/global/"
validate="options"
>
<field name="noteFontScheme" type="note" description="TPL_MOKO-CASSIOPEIA_FONT_NOTE_TEXT"
class="alert alert-warning" />
<field name="colorName" type="list" label="TPL_MOKO-CASSIOPEIA_COLOR_NAME_LABEL"
default="colors_standard">
<option value="colors_standard">TPL_MOKO-CASSIOPEIA_COLOR_NAME_STANDARD</option>
<option value="colors_alternative">TPL_MOKO-CASSIOPEIA_COLOR_NAME_ALTERNATIVE</option>
<option value="colors_custom">TPL_MOKO-CASSIOPEIA_COLOR_NAME_CUSTOM</option>
</field>
<field
name="fluidContainer"
type="radio"
layout="joomla.form.field.radio.switcher"
default="0"
label="TPL_MOKO-CASSIOPEIA_FLUID_LABEL"
>
<field name="fluidContainer" type="radio" layout="joomla.form.field.radio.switcher"
default="0" label="TPL_MOKO-CASSIOPEIA_FLUID_LABEL">
<option value="0">TPL_MOKO-CASSIOPEIA_STATIC</option>
<option value="1">TPL_MOKO-CASSIOPEIA_FLUID</option>
</field>
<field
name="stickyHeader"
type="radio"
label="TPL_MOKO-CASSIOPEIA_STICKY_LABEL"
layout="joomla.form.field.radio.switcher"
default="0"
filter="integer"
>
<field name="stickyHeader" type="radio" label="TPL_MOKO-CASSIOPEIA_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_MOKO-CASSIOPEIA_BACKTOTOP_LABEL"
layout="joomla.form.field.radio.switcher"
default="0"
filter="integer"
>
<field name="backTop" type="radio" label="TPL_MOKO-CASSIOPEIA_BACKTOTOP_LABEL"
layout="joomla.form.field.radio.switcher" default="0" filter="integer">
<option value="0">JNO</option>
<option value="1">JYES</option>
</field>
</fieldset>
<fieldset name="google">
<field
name="googletagmanager"
type="radio"
label="TPL_MOKO-CASSIOPEIA_GOOGLETAGMANAGER_LABEL"
description="TPL_MOKO-CASSIOPEIA_GOOGLETAGMANAGER_DESC"
layout="joomla.form.field.radio.switcher"
filter="boolean"
>
<field name="googletagmanager" type="radio" label="TPL_MOKO-CASSIOPEIA_GOOGLETAGMANAGER_LABEL"
description="TPL_MOKO-CASSIOPEIA_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_MOKO-CASSIOPEIA_GOOGLETAGMANAGERID_LABEL"
description="TPL_MOKO-CASSIOPEIA_GOOGLETAGMANAGERID_DESC"
filter="string"
showon="googletagmanager:1"
/>
<field name="googletagmanagerid" type="text" default="" label="TPL_MOKO-CASSIOPEIA_GOOGLETAGMANAGERID_LABEL"
description="TPL_MOKO-CASSIOPEIA_GOOGLETAGMANAGERID_DESC" filter="string"
showon="googletagmanager:1" />
<field name="googleanalytics" type="radio" label="TPL_MOKO-CASSIOPEIA_GOOGLEANALYTICS_LABEL"
description="TPL_MOKO-CASSIOPEIA_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_MOKO-CASSIOPEIA_GOOGLEANALYTICSID_LABEL"
description="TPL_MOKO-CASSIOPEIA_GOOGLEANALYTICSID_DESC" filter="string"
showon="googleanalytics:1" />
</fieldset>
<fieldset name="custom_head">
<field
name="custom_head_start"
type="textarea"
default=""
label="TPL_MOKO-CASSIOPEIA_CUSTOM_HEAD_START_LABEL"
description="TPL_MOKO-CASSIOPEIA_CUSTOM_HEAD_START_DESC"
filter="raw"/>
<field
name="custom_head_end"
type="textarea"
default=""
label="TPL_MOKO-CASSIOPEIA_CUSTOM_HEAD_END_LABEL"
description="TPL_MOKO-CASSIOPEIA_CUSTOM_HEAD_END_DESC"
filter="raw"/>
<field name="custom_head_start" type="textarea" default="" label="TPL_MOKO-CASSIOPEIA_CUSTOM_HEAD_START_LABEL"
description="TPL_MOKO-CASSIOPEIA_CUSTOM_HEAD_START_DESC" filter="raw" />
<field name="custom_head_end" type="textarea" default="" label="TPL_MOKO-CASSIOPEIA_CUSTOM_HEAD_END_LABEL"
description="TPL_MOKO-CASSIOPEIA_CUSTOM_HEAD_END_DESC" filter="raw" />
</fieldset>
<fieldset name="drawers">
<field
name="drawerLeftIcon"
type="text"
default="fa-solid fa-chevron-right"
label="TPL_MOKO-CASSIOPEIA_DRAWER_LEFT_ICON_LABEL"
description="TPL_MOKO-CASSIOPEIA_DRAWER_LEFT_ICON_DESC"
filter="string"
/>
<field
name="drawerRightIcon"
type="text"
default="fa-solid fa-chevron-left"
label="TPL_MOKO-CASSIOPEIA_DRAWER_RIGHT_ICON_LABEL"
description="TPL_MOKO-CASSIOPEIA_DRAWER_RIGHT_ICON_DESC"
filter="string"
/>
<field name="drawerLeftIcon" type="text" default="fa-solid fa-chevron-right"
label="TPL_MOKO-CASSIOPEIA_DRAWER_LEFT_ICON_LABEL" description="TPL_MOKO-CASSIOPEIA_DRAWER_LEFT_ICON_DESC"
filter="string" />
<field name="drawerRightIcon" type="text" default="fa-solid fa-chevron-left"
label="TPL_MOKO-CASSIOPEIA_DRAWER_RIGHT_ICON_LABEL" description="TPL_MOKO-CASSIOPEIA_DRAWER_RIGHT_ICON_DESC"
filter="string" />
</fieldset>
</fields>
</config>
</extension>
</extension>