- Restored Default Article Override
- Created Table of Contents article override
- Added TOC skip to Comments Heading
- Localized AFeld/Bootstrap-TOC files
This commit is contained in:
2025-07-10 22:21:19 -05:00
parent 1dca9ddb0b
commit 6f75cd5c03
12 changed files with 526 additions and 10 deletions

View File

@@ -21,6 +21,22 @@
scroll-behavior: smooth;
}
}
@media print {
nav,
.container-topbar,
.container-nav,
#rssocial-133,
.container-sidebar-right,
.container-sidebar-left,
.container-bottom-a,
.container-bottom-b,
#lhc_container_v2 *,
footer,
.fb-comments,
{
display: none!important;
}
}
body {
margin: 0;

View File

@@ -0,0 +1,4 @@
/*!
* Bootstrap Table of Contents v1.0.1 (http://afeld.github.io/bootstrap-toc/)
* Copyright 2015 Aidan Feldman
* Licensed under MIT (https://github.com/afeld/bootstrap-toc/blob/gh-pages/LICENSE.md) */nav[data-toggle=toc] .nav>li>a{display:block;padding:4px 20px;font-size:13px;font-weight:500;color:#767676}nav[data-toggle=toc] .nav>li>a:focus,nav[data-toggle=toc] .nav>li>a:hover{padding-left:19px;color:#563d7c;text-decoration:none;background-color:transparent;border-left:1px solid #563d7c}nav[data-toggle=toc] .nav-link.active,nav[data-toggle=toc] .nav-link.active:focus,nav[data-toggle=toc] .nav-link.active:hover{padding-left:18px;font-weight:700;color:#563d7c;background-color:transparent;border-left:2px solid #563d7c}nav[data-toggle=toc] .nav-link+ul{display:none;padding-bottom:10px}nav[data-toggle=toc] .nav .nav>li>a{padding-top:1px;padding-bottom:1px;padding-left:30px;font-size:12px;font-weight:400}nav[data-toggle=toc] .nav .nav>li>a:focus,nav[data-toggle=toc] .nav .nav>li>a:hover{padding-left:29px}nav[data-toggle=toc] .nav .nav>li>.active,nav[data-toggle=toc] .nav .nav>li>.active:focus,nav[data-toggle=toc] .nav .nav>li>.active:hover{padding-left:28px;font-weight:500}nav[data-toggle=toc] .nav-link.active+ul{display:block}

View File

@@ -0,0 +1,5 @@
/*!
* Bootstrap Table of Contents v1.0.1 (http://afeld.github.io/bootstrap-toc/)
* Copyright 2015 Aidan Feldman
* Licensed under MIT (https://github.com/afeld/bootstrap-toc/blob/gh-pages/LICENSE.md) */
!function(a){"use strict";window.Toc={helpers:{findOrFilter:function(e,t){var n=e.find(t);return e.filter(t).add(n).filter(":not([data-toc-skip])")},generateUniqueIdBase:function(e){return a(e).text().trim().replace(/\'/gi,"").replace(/[& +$,:;=?@"#{}|^~[`%!'<>\]\.\/\(\)\*\\\n\t\b\v]/g,"-").replace(/-{2,}/g,"-").substring(0,64).replace(/^-+|-+$/gm,"").toLowerCase()||e.tagName.toLowerCase()},generateUniqueId:function(e){for(var t=this.generateUniqueIdBase(e),n=0;;n++){var r=t;if(0<n&&(r+="-"+n),!document.getElementById(r))return r}},generateAnchor:function(e){if(e.id)return e.id;var t=this.generateUniqueId(e);return e.id=t},createNavList:function(){return a('<ul class="nav navbar-nav"></ul>')},createChildNavList:function(e){var t=this.createNavList();return e.append(t),t},generateNavEl:function(e,t){var n=a('<a class="nav-link"></a>');n.attr("href","#"+e),n.text(t);var r=a("<li></li>");return r.append(n),r},generateNavItem:function(e){var t=this.generateAnchor(e),n=a(e),r=n.data("toc-text")||n.text();return this.generateNavEl(t,r)},getTopLevel:function(e){for(var t=1;t<=6;t++){if(1<this.findOrFilter(e,"h"+t).length)return t}return 1},getHeadings:function(e,t){var n="h"+t,r="h"+(t+1);return this.findOrFilter(e,n+","+r)},getNavLevel:function(e){return parseInt(e.tagName.charAt(1),10)},populateNav:function(r,a,e){var i,s=r,c=this;e.each(function(e,t){var n=c.generateNavItem(t);c.getNavLevel(t)===a?s=r:i&&s===r&&(s=c.createChildNavList(i)),s.append(n),i=n})},parseOps:function(e){var t;return(t=e.jquery?{$nav:e}:e).$scope=t.$scope||a(document.body),t}},init:function(e){(e=this.helpers.parseOps(e)).$nav.attr("data-toggle","toc");var t=this.helpers.createChildNavList(e.$nav),n=this.helpers.getTopLevel(e.$scope),r=this.helpers.getHeadings(e.$scope,n);this.helpers.populateNav(t,n,r)}},a(function(){a('nav[data-toggle="toc"]').each(function(e,t){var n=a(t);Toc.init(n)})})}(jQuery);

View File

@@ -99,12 +99,9 @@ $isExpired = !is_null($this->item->publish_down) && $this->item->publish
echo $this->item->toc;
endif; ?>
<div itemprop="articleBody" class="com-content-article__body">
<nav id="toc" data-toggle="toc"></nav>
<?php
if (strpos($this->pageclass_sfx, 'no-toc') === false) {
echo '<nav id="toc" data-toggle="toc"></nav>';
}
?>
<?php echo $this->item->text; ?>
echo $this->item->text; ?>
</div>
<?php if ($info == 1 || $info == 2) : ?>

View File

@@ -0,0 +1,77 @@
<?php
/**
* @package AkeebaEngage
* @copyright Copyright (c)2020-2025 Nicholas K. Dionysopoulos / Akeeba Ltd
* @license GNU General Public License version 3, or later
*/
defined('_JEXEC') or die();
/**
* View Template for comments display
*
* This is the main view template used when comments are being displayed e.g. at the end of an article.
*
* This provides the outer HTML structure of the comments.
*
* It loads the following view templates:
* - default_list.php The threaded list of comments
* - default_login.php Login form for guest users
* - default_form.php Comment / reply submission form
*/
use Joomla\CMS\Component\ComponentHelper;
use Joomla\CMS\Language\Text;
/** @var \Akeeba\Component\Engage\Site\View\Comments\HtmlView $this */
$cParams = ComponentHelper::getParams('com_engage');
?>
<section id="akengage-comments-section" class="akengage-outer-container"
aria-label="<?= Text::_('COM_ENGAGE_COMMENTS_SECTION_HEADER') ?>">
<h3 class="akengage-title h4 border-bottom mb-2" data-toc-skip>
<?= Text::plural($this->headerKey, $this->pagination->total, $this->title) ?>
</h3>
<?= $this->loadPosition('engage-before-comments') ?>
<?php if ($this->pagination->total): ?>
<div class="akengage-list-container">
<?= $this->loadTemplate('list') ?>
</div>
<?= $this->loadPosition('engage-after-comments') ?>
<?php if ($this->pagination->pagesTotal > 1): ?>
<div class="akengage-pagination">
<div class="akengage-pagination-pages pagination" itemscope itemtype="http://www.schema.org/SiteNavigationElement">
<?= $this->pagination->getPagesLinks() ?>
</div>
</div>
<?php endif; ?>
<?php endif; ?>
<?php if (!$this->areCommentsClosed && $this->user->guest && !$this->perms['create']): ?>
<?= $this->loadTemplate('login') ?>
<?php endif; ?>
<?php if ($this->perms['create'] && !$this->areCommentsClosed): ?>
<?= $this->loadTemplate('form') ?>
<?php endif; ?>
<?php if ($this->perms['create'] && $this->areCommentsClosed): ?>
<div class="alert alert-info">
<h3 class="alert-heading">
<?= Text::_('COM_ENGAGE_COMMENTS_LBL_CLOSED_HEADER') ?>
</h3>
<p>
<?php if ($this->areCommentsClosedAfterTime): ?>
<?= Text::_('COM_ENGAGE_COMMENTS_LBL_CLOSED_AFTERTIME') ?>
<?php else: ?>
<?= Text::_('COM_ENGAGE_COMMENTS_LBL_CLOSED_BODY') ?>
<?php endif; ?>
</p>
</div>
<?php endif; ?>
</section>

View File

@@ -0,0 +1,89 @@
<?php
/**
* @package AkeebaEngage
* @copyright Copyright (c)2020-2025 Nicholas K. Dionysopoulos / Akeeba Ltd
* @license GNU General Public License version 3, or later
*/
defined('_JEXEC') or die();
/**
* View Template for the submitting comments.
*
* This is called by default.php
*/
use Joomla\CMS\Component\ComponentHelper;
use Joomla\CMS\HTML\HTMLHelper;
use Joomla\CMS\Language\Text;
use Joomla\CMS\Router\Route;
use Joomla\CMS\Uri\Uri;
/** @var \Akeeba\Component\Engage\Site\View\Comments\HtmlView $this */
$cParams = ComponentHelper::getParams('com_engage');
$badUx = ($cParams->get('comments_reply_bad_ux', 0) == 1) && empty($this->form->getValue('body'));
HTMLHelper::_('behavior.formvalidator');
?>
<?php if ($badUx): ?>
<div class="akengage-comment-hider" id="akengage-comment-hider">
<button type="button"
id="akengage-comment-hider-button"
class="btn btn-primary">
<?= Text::_('COM_ENGAGE_COMMENTS_FORM_HEADER'); ?>
</button>
</div>
<?php endif; ?>
<form action="<?= Route::_('index.php?option=com_engage&task=comment.save') ?>"
method="post" name="akengage-comment-form" id="akengageCommentForm"
class="form-validate <?= $badUx ? 'd-none' : ''; ?>"
style="<?= $badUx ? 'display: none;' : ''; ?>"
aria-label="<?= Text::_('COM_ENGAGE_COMMENTS_FORM_HEADER', true) ?>"
>
<input type="hidden" name="returnurl" value="<?= base64_encode(Uri::getInstance()->toString(['scheme', 'user', 'pass', 'host', 'port', 'path', 'query', 'fragment'])) ?>">
<input type="hidden" name="view" value="">
<input type="hidden" name="id" value="">
<?= HTMLHelper::_('form.token') ?>
<div class="mt-3 pt-2 mb-2 border-top border-2 border-dark">
<h3 class="h1 my-3">
<?= Text::_('COM_ENGAGE_COMMENTS_FORM_HEADER') ?>
</h3>
<?= $this->loadPosition('engage-before-reply'); ?>
<div id="akengage-comment-inreplyto-wrapper" class="alert alert-info d-none">
<div class="d-flex flex-wrap">
<div class="flex-grow-1">
<?= Text::_('COM_ENGAGE_COMMENTS_FORM_INREPLYTO_LABEL'); ?>
<span id="akengage-comment-inreplyto-name" class="text-secondary fw-bold">Some User</span>
</div>
<button id="akengage-comment-inreplyto-cancel"
type="button"
class="ms-2 btn btn-sm btn-outline-danger"
><?= Text::_('COM_ENGAGE_COMMENTS_FORM_CANCELREPLY'); ?></button>
</div>
</div>
<?php foreach (array_keys($this->form->getFieldsets()) as $fieldSet)
{
echo $this->form->renderFieldset($fieldSet);
} ?>
<div class="control-group">
<div class="controls">
<button type="submit"
class="btn btn-lg btn-primary w-100 akengage-comment-submit-btn"
>
<span class="fa fa-comment-dots" aria-hidden="true"></span>
<?= Text::_('COM_ENGAGE_COMMENTS_FORM_EDIT_BTN_SUBMIT') ?>
</button>
</div>
</div>
<?= $this->loadPosition('engage-after-reply'); ?>
</div>
</form>

View File

@@ -0,0 +1,284 @@
<?php
/**
* @package AkeebaEngage
* @copyright Copyright (c)2020-2025 Nicholas K. Dionysopoulos / Akeeba Ltd
* @license GNU General Public License version 3, or later
*/
defined('_JEXEC') or die();
/**
* View Template for the threaded display of comments.
*
* Loaded from default.php
*/
use Akeeba\Component\Engage\Administrator\Helper\Avatar;
use Akeeba\Component\Engage\Administrator\Helper\UserFetcher;
use Joomla\CMS\Factory;
use Joomla\CMS\HTML\HTMLHelper;
use Joomla\CMS\Language\Text;
use Joomla\CMS\Uri\Uri;
use Joomla\CMS\User\User;
// Maximum avatar width, in pixels.
$maxAvatarWidth = 48;
/** @var \Akeeba\Component\Engage\Site\View\Comments\HtmlView $this */
$previousLevel = 0;
$openListItem = 0;
$parentIds = [0 => 0];
$parentNames = [0 => ''];
foreach ($this->items as $comment):
$user = !empty($comment->created_by) && empty($comment->name) ? UserFetcher::getUser($comment->created_by) : new User();
if (empty($comment->created_by) || !empty($comment->name)) {
$user->name = $comment->name;
$user->email = $comment->email;
}
$parentIds[$comment->depth] = $comment->id;
$parentNames[$comment->depth] = $user->name;
// Deeper level comment. Indent with <ul> tags
if ($comment->depth > $previousLevel):
?>
<?php for ($level = $previousLevel + 1; $level <= $comment->depth; $level++): ?>
<ul class="akengage-comment-list akengage-comment-list--level<?= $level ?> list-unstyled">
<?php endfor; ?>
<?php // Shallower level comment. Outdent with </ul> tags
elseif ($comment->depth < $previousLevel): ?>
<?php if ($openListItem): $openListItem--; ?>
</li>
<?php endif; ?>
<?php for ($level = $previousLevel - 1; $level >= $comment->depth; $level--): ?>
</ul>
<?php if ($openListItem): $openListItem--; ?>
</li>
<?php endif; ?>
<?php endfor; ?>
<?php // Same level comment. Close the <li> tag.
else: ?>
<?php $openListItem--; ?>
</li>
<?php endif; ?>
<?php
$previousLevel = $comment->depth;
$avatar = Avatar::getUserAvatar($comment->created_by, $maxAvatarWidth, $comment->email);
$profile = Avatar::getProfileURL($user);
$commentDate = Factory::getDate($comment->created)->setTimezone($this->userTimezone);
$ipLookupURL = $this->getIPLookupURL($comment->ip);
$isModified = !empty($comment->modified_by) && !empty($comment->modified) && (
empty($comment->created_by) || empty($comment->created) || (
($comment->modified_by != $comment->created_by) &&
($comment->modified != $comment->created)
)
);
if ($isModified)
{
if ($comment->modified_by == $comment->created_by)
{
// If the comment is modified by the created by user, use the public name determined at the top of the file.
$modifiedBy = $user->name;
}
else
{
// Someone else modified the comment. Use their name.
$modifiedUser = UserFetcher::getUser($comment->modified_by);
// If the user is no longer available, use '???'
$modifiedBy = ($modifiedUser === null || $modifiedUser->guest) ? Text::_('COM_ENGAGE_LBL_COMMENT_MODIFIED_NO_LONGER_AVAILABLE') : $modifiedUser->name;
}
}
$openListItem++;
$this->ensureHasParentInfo($comment, $parentIds, $parentNames);
$bsCommentStateClass = ($comment->enabled == 1) ? 'secondary' : (($comment->enabled == -3) ? 'warning' : 'danger')
?>
<li class="akengage-comment-item mb-2">
<article
class="akengage-comment--<?= ($comment->enabled == 1) ? 'primary' : (($comment->enabled == -3) ? 'spam' : 'unpublished') ?> border-start border-4 border-<?= $bsCommentStateClass ?> ps-2 mb-2"
id="akengage-comment-<?= $comment->id ?>" itemscope itemtype="http://schema.org/Comment">
<span itemprop="dateCreated" content="<?= $commentDate->toISO8601(false) ?>"></span>
<span itemprop="datePublished" content="<?= $commentDate->toISO8601(false) ?>"></span>
<footer
itemprop="author" itemscope itemtype="http://schema.org/Person"
class="akengage-comment-properties d-flex flex-row gap-1 mb-1 bg-light p-1 small border-bottom border-2">
<?php if (!empty($avatar)): ?>
<div class="akengage-commenter-avatar-container d-none d-sm-block flex-shrink-1" style="max-width: <?= (int) $maxAvatarWidth ?>px">
<?php if (empty($profile)): ?>
<img src="<?= $avatar ?>" alt="" class="akengage-commenter-avatar img-fluid rounded-3 shadow-sm" itemprop="image">
<?php else: ?>
<a href="<?= $profile ?>" class="akengage-commenter-profile" itemprop="url" rel="noopener">
<img src="<?= $avatar ?>"
alt=""
class="akengage-commenter-avatar img-fluid rounded-3 shadow-sm" itemprop="image">
</a>
<?php endif; ?>
</div>
<?php endif; ?>
<div class="akengange-comment-head d-flex flex-column w-100">
<div class="akengange-commenter-name d-flex flex-row flex-wrap gap-3 align-items-center mb-1">
<span itemprop="name" class="fw-bold flex-grow-1"><?= $this->escape($user->name) ?></span>
<?php if ($this->perms['state']): ?>
<div>
<?php if ($user->authorise('core.manage', $comment->asset_id)): ?>
<span class="akengage-commenter-ismoderator fa fa-star text-warning" aria-hidden="true"></span>
<?php elseif (!$user->guest): ?>
<span class="akengage-commenter-isuser fa fa-user text-secondary" aria-hidden="true"></span>
<?php endif; ?>
<?php if (!$user->guest): ?>
<span class="akengage-commenter-username font-monospace text-success"><?= $this->escape($user->username) ?></span>
<?php elseif ($this->perms['state']): ?>
<span class="akengage-commenter-isguest fa fa-user-friends text-danger" aria-hidden="true"></span>
<span class="akengage-commenter-email font-monospace text-muted"><?= $this->escape($user->email) ?></span>
<?php endif; ?>
</div>
<?php endif; ?>
</div>
<div class="akengage-comment-info d-flex flex-row flex-wrap gap-2 align-items-center">
<div class="akengage-comment-permalink flex-grow-1">
<?php
$tempUri = clone Uri::getInstance();
$tempUri->setFragment(sprintf('akengage-comment-%u', $comment->id));
$tempUri->setVar('akengage_cid', $comment->id);
?>
<a href="<?= $tempUri->toString() ?>"
class="text-body text-decoration-none"
>
<?= $commentDate->format(Text::_('DATE_FORMAT_LC2'), true) ?>
</a>
</div>
<div class="akengage-comment-actions d-flex gap-1">
<?php if ($this->perms['state']): ?>
<span class="akengage-comment-publish_unpublish">
<?php if ($comment->enabled == 1): ?>
<button class="akengage-comment-unpublish-btn btn btn-sm btn-outline-secondary"
data-akengageid="<?= $comment->id ?>">
<?= Text::_('COM_ENGAGE_COMMENTS_BTN_UNPUBLISH') ?>
</button>
<?php elseif ($comment->enabled == 0): ?>
<button class="akengage-comment-publish-btn btn btn-sm btn-outline-secondary"
data-akengageid="<?= $comment->id ?>">
<?= Text::_('COM_ENGAGE_COMMENTS_BTN_PUBLISH') ?>
</button>
<?php endif; ?>
</span>
<?php if($comment->enabled == -3): ?>
<span class="akengage-comment-mark-ham">
<button class="akengage-comment-markham-btn btn btn-sm btn-outline-success"
data-akengageid="<?= $comment->id ?>"
title="<?= Text::_('COM_ENGAGE_COMMENTS_BTN_MARKHAM_TITLE') ?>">
<?= Text::_('COM_ENGAGE_COMMENTS_BTN_MARKHAM') ?>
</button>
</span>
<?php if ($this->perms['delete']): ?>
<span class="akengage-comment-mark-spam">
<button class="akengage-comment-markspam-btn btn btn-sm btn-outline-danger"
data-akengageid="<?= $comment->id ?>"
title="<?= Text::_('COM_ENGAGE_COMMENTS_BTN_MARKSPAM_TITLE') ?>">
<?= Text::_('COM_ENGAGE_COMMENTS_BTN_MARKSPAM') ?>
</button>
</span>
<?php endif; ?>
<?php else: ?>
<span class="akengage-comment-mark-possiblespam">
<button class="akengage-comment-possiblespam-btn btn btn-sm btn-outline-warning"
data-akengageid="<?= $comment->id ?>"
title="<?= Text::_('COM_ENGAGE_COMMENTS_BTN_POSSIBLESPAM_TITLE') ?>">
<?= Text::_('COM_ENGAGE_COMMENTS_BTN_POSSIBLESPAM') ?>
</button>
</span>
<?php endif; ?>
<?php endif; ?>
<?php if ($this->perms['delete']): ?>
<span class="akengage-comment-delete">
<button class="akengage-comment-delete-btn btn btn-sm btn-outline-danger"
data-akengageid="<?= $comment->id ?>">
<?= Text::_('COM_ENGAGE_COMMENTS_BTN_DELETE') ?>
</button>
</span>
<?php endif; ?>
<?php if ($this->perms['edit'] || (($this->user->id === $user->id) && $this->perms['own'])): ?>
<span class="akengage-comment-edit">
<button class="akengage-comment-edit-btn btn btn-sm btn-outline-primary"
data-akengageid="<?= $comment->id ?>">
<?= Text::_('COM_ENGAGE_COMMENTS_BTN_EDIT') ?>
</button>
</span>
<?php endif; ?>
</div>
</div>
<?php if ($this->perms['edit'] || $this->user->authorise('core.manage', $comment->asset_id)): ?>
<div>
<?php if (!empty($ipLookupURL)): ?>
<span class="akengage-comment-ip">
<a href="<?= $ipLookupURL ?>" target="_blank">
<?= Text::sprintf('COM_ENGAGE_COMMENTS_IP', $comment->ip ?? '???') ?>
</a>
</span>
<?php else: ?>
<span class="akengage-comment-ip">
<?= Text::sprintf('COM_ENGAGE_COMMENTS_IP', $comment->ip ?? '???') ?>
</span>
<?php endif; ?>
</div>
<?php endif; ?>
</div>
</footer>
<?php if ($comment->enabled == -3): ?>
<div class="akengage-comment-publish-type bg-warning text-white fw-bold p-2">
<?= Text::_('COM_ENGAGE_COMMENTS_TYPE_SPAM') ?>
</div>
<?php elseif ($comment->enabled != 1): ?>
<div class="akengage-comment-publish-type bg-danger text-white fw-bold p-2">
<?= Text::_('COM_ENGAGE_COMMENTS_TYPE_UNPUBLISHED') ?>
</div>
<?php endif ?>
<div class="akengage-comment-body" itemprop="text">
<?= HTMLHelper::_('engage.processCommentTextForDisplay', $comment->body) ?>
<?php if ($isModified): ?>
<div class="my-2 border-top border-1 border-muted text-muted small">
<?= Text::sprintf('COM_ENGAGE_LBL_COMMENT_MODIFIED', Factory::getDate($comment->modified)->setTimezone($this->userTimezone)->format(Text::_('DATE_FORMAT_LC2'), true), $modifiedBy) ?>
</div>
<?php endif; ?>
</div>
<?php if ($this->perms['create']): ?>
<div class="akengage-comment-reply">
<?php // You can reply to $this->maxLevel - 1 level comments only. Replies to deeper nested comments are to the $this->maxLevel - 1 level parent. ?>
<button class="akengage-comment-reply-btn btn btn-sm btn-outline-primary mb-1"
data-akengageid="<?= ($comment->depth < $this->maxLevel) ? $comment->id : $parentIds[$this->maxLevel - 1] ?>"
data-akengagereplyto="<?= $this->escape(($comment->depth < $this->maxLevel) ? $user->name : $parentNames[$this->maxLevel - 1]) ?>"
>
<?= Text::_('COM_ENGAGE_COMMENTS_BTN_REPLY') ?>
</button>
</div>
<?php endif; ?>
</article>
<?php endforeach; ?>
<?php if ($openListItem): ?>
<?php $openListItem--; ?>
</li>
<?php endif; ?>
<?php for ($level = $previousLevel; $level >= 1; $level--): ?>
</ul>
<?php if ($openListItem): ?>
<?php $openListItem--; ?>
</li>
<?php endif; ?>
<?php endfor; ?>

View File

@@ -0,0 +1,44 @@
<?php
/**
* @package AkeebaEngage
* @copyright Copyright (c)2020-2025 Nicholas K. Dionysopoulos / Akeeba Ltd
* @license GNU General Public License version 3, or later
*/
defined('_JEXEC') or die();
/**
* View Template for the guest users login form
*
* Loaded from default.php
*/
use Joomla\CMS\Component\ComponentHelper;
use Joomla\CMS\Language\Text;
/** @var \Akeeba\Component\Engage\Site\View\Comments\HtmlView $this */
$cParams = ComponentHelper::getParams('com_engage');
$loginModule = $cParams->get('login_module', '-1');
$moduleContent = (empty($loginModule) || ($loginModule === '-1')) ? '' : trim($this->loadModule($loginModule));
$positionContent = trim($this->loadPosition('engage-login'));
/**
* A reason for this to happen is that site owner wants discussion to be open to invitation-only members of the site but
* visible by anyone. This is mostly relevant in political organizations, NGOs and local / closed community
* organizations where a small number of people are openly discussing a public interest issue, but they don't want to
* allow random people to detract the conversation.
*/
if (empty($moduleContent) && empty($positionContent))
{
return;
}
?>
<footer id="akeeba-engage-login">
<h4>
<?= Text::_('COM_ENGAGE_COMMENTS_LOGIN_HEAD') ?>
</h4>
<?= $moduleContent ?>
<?= $positionContent ?>
</footer>

View File

@@ -157,10 +157,10 @@ if ($this->params->get('fA6KitCode')) {
$wa->getAsset('style', 'fontawesome')->setAttribute('rel', 'lazy-stylesheet');
}
// Add Bootstrap TOC CSS
$this->addStyleSheet('https://cdn.rawgit.com/afeld/bootstrap-toc/v1.0.1/dist/bootstrap-toc.min.css');
$this->addStyleSheet($templatePath . '/css/vendor/afeld/bootstrap-toc.min.css');
// Add Bootstrap TOC JS (should be loaded after Bootstrap JS)
$this->addScript('https://cdn.rawgit.com/afeld/bootstrap-toc/v1.0.1/dist/bootstrap-toc.min.js');
$this->addScript($templatePath . '/js/vendor/afeld/bootstrap-toc.min.js');
?>
<!DOCTYPE html>

View File

@@ -4,7 +4,7 @@
<server type="extension" name="Moko Consulting">https://mokoconsulting.tech/updates/updates.xml</server>
</updateservers>
<name>moko-cassiopeia</name>
<version>1.10</version>
<version>1.11</version>
<creationDate>2023-05</creationDate>
<author>Jonathan Miller || Moko Consulting</author>
<authorEmail>jmiller@mokoconsulting.tech</authorEmail>

Binary file not shown.

View File

@@ -5,14 +5,14 @@
<element>moko-cassiopeia</element>
<type>template</type>
<client>site</client>
<version>1.10</version>
<version>1.11</version>
<creationDate>2023-05</creationDate>
<author>Jonathan Miller || Moko Consulting</author>
<authorEmail>jmiller@mokoconsulting.tech</authorEmail>
<copyright>(C)GNU General Public License Version 2 - 2025 Moko Consulting</copyright>
<infourl title="MOKO-CASSIOPEIA Info">https://mokoconsulting.tech/moko-cassiopeia</infourl>
<downloads>
<downloadurl type="full" format="zip">https://mokoconsulting.tech/updates/moko-cassiopeia_v1.10.zip</downloadurl>
<downloadurl type="full" format="zip">https://mokoconsulting.tech/updates/moko-cassiopeia_v1.11.zip</downloadurl>
</downloads>
<tags>
<tag>stable</tag>