v1.13
- Fixed CSS - Cleaned up Table of Contents - Deleted conflicting default.php in com_content
This commit is contained in:
@@ -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\'']);
|
||||
|
||||
@@ -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) .
|
||||
');';
|
||||
|
||||
@@ -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\'']);
|
||||
|
||||
@@ -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; ?>
|
||||
@@ -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) : ?>
|
||||
@@ -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) : ?>
|
||||
@@ -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; ?>
|
||||
|
||||
@@ -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\'']);
|
||||
|
||||
@@ -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&display=swap">Fira Sans (web)</option>
|
||||
<option value="https://fonts.googleapis.com/css2?family=Noto+Sans:wght@100;300;400;700&family=Roboto:wght@100;300;400;700&display=swap">Roboto + Noto Sans (web)</option>
|
||||
<option value="https://fonts.googleapis.com/css2?family=Fira+Sans:wght@100;300;400;700&display=swap">Fira
|
||||
Sans (web)</option>
|
||||
<option value="https://fonts.googleapis.com/css2?family=Noto+Sans:wght@100;300;400;700&family=Roboto:wght@100;300;400;700&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>
|
||||
Reference in New Issue
Block a user