v1.11
- 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:
@@ -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;
|
||||
|
||||
4
media/templates/site/moko-cassiopeia/css/vendor/afeld/bootstrap-toc.min.css
vendored
Normal file
4
media/templates/site/moko-cassiopeia/css/vendor/afeld/bootstrap-toc.min.css
vendored
Normal 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}
|
||||
5
media/templates/site/moko-cassiopeia/js/vendor/afeld/bootstrap-toc.min.js
vendored
Normal file
5
media/templates/site/moko-cassiopeia/js/vendor/afeld/bootstrap-toc.min.js
vendored
Normal 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);
|
||||
@@ -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) : ?>
|
||||
@@ -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>
|
||||
@@ -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>
|
||||
@@ -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; ?>
|
||||
@@ -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>
|
||||
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
BIN
updates/moko-cassiopeia_v1.11.zip
Normal file
BIN
updates/moko-cassiopeia_v1.11.zip
Normal file
Binary file not shown.
@@ -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>
|
||||
|
||||
Reference in New Issue
Block a user