В шаблоне iO Child Theme
Панель редактирования сообщений \ публикаций !!
admin.php?templates/post_macros.6301/edit&style_id=8
Панель редактирования сообщений \ публикаций !!
admin.php?templates/post_macros.6301/edit&style_id=8
PHP:
.message-footer .actionBar-action--report, .message-footer .actionBar-action--edit, .message-footer .actionBar-action--delete, .message-footer .actionBar-action--ip, .message-footer .actionBar-action--warn, .message-footer .actionBar-action--bookmark, .message-footer .actionBar-action--reply, .message-footer .actionBar-action--mq, .message-footer .actionBar-action--like, .message-footer
PHP:
<xf:macro name="post"
arg-post="!"
arg-thread="!"
arg-uix_condensed=""
arg-highlightedPosts="{{ [] }}">
<xf:css src="message.less" />
<xf:set var="$isIgnored" value="{{ $post.isIgnored() }}" />
<xf:extension name="before"></xf:extension>
<xf:extension name="extra_classes" value="message--post" />
<article class="message {{ extension_value('extra_classes') }} {{ $uix_condensed ? 'uix_message--condensed' : '' }} js-post js-inlineModContainer {{ $post.isIgnored() ? 'is-ignored' : '' }} {{ $post.isUnread() ? ' is-unread' : '' }}"
data-author="{{ $post.User.username ?: $post.username }}"
data-content="post-{$post.post_id}"
id="js-post-{$post.post_id}">
<span class="u-anchorTarget" id="post-{$post.post_id}"></span>
<xf:extension name="full_body">
<div class="message-inner">
<xf:extension name="user_cell">
<div class="message-cell message-cell--user">
<xf:macro template="message_macros" name="user_info" arg-threadUserId="{$thread.user_id}" arg-user="{$post.User}"
arg-fallbackName="{$post.username}"/>
</div>
</xf:extension>
<xf:extension name="main_cell">
<div class="message-cell message-cell--main">
<xf:extension name="main_cell_inner">
<div class="message-main uix_messageContent js-quickEditTarget">
<xf:extension name="attribution">
<xf:macro name="post_attribution" arg-post="{$post}" arg-thread="{$thread}" />
</xf:extension>
<div class="message-content js-messageContent">
<xf:extension name="content">
<xf:extension name="notices">
<xf:macro name="post_notices" arg-post="{$post}" arg-thread="{$thread}" />
</xf:extension>
<xf:extension name="user_content">
<xf:macro name="post_user_content" arg-post="{$post}" arg-thread="{$thread}" />
</xf:extension>
<xf:extension name="after_content">
<xf:macro name="post_last_edit" arg-post="{$post}" />
</xf:extension>
<xf:extension name="signature">
<xf:macro template="message_macros" name="signature" arg-user="{$post.User}" />
</xf:extension>
</xf:extension>
</div>
<div class="reactionsBar js-reactionsList {{ $post.reactions ? 'is-active' : '' }}">
<xf:reactions content="{$post}" link="posts/reactions" />
</div>
<xf:extension name="footer">
<xf:macro name="post_footer" arg-post="{$post}" arg-thread="{$thread}" />
</xf:extension>
</div>
</xf:extension>
</div>
</xf:extension>
</div>
</xf:extension>
</article>
<xf:extension name="after"></xf:extension>
<xf:ad position="post_below_container" arg-post="{$post}" />
</xf:macro>
<xf:macro name="post_attribution"
arg-post="!"
arg-thread="!"
arg-showPosition="{{ true }}"
arg-showUser="{{ false }}"
arg-showThreadUnreadIndicator="{{ false }}"
arg-showReplyCount="{{ false }}"
arg-repliesPhrase="{{ phrase('replies:') }}"
arg-mainClass=""
arg-oppositeClass="">
<header class="message-attribution message-attribution--split">
<ul class="message-attribution-main listInline {$mainClass}">
<xf:if is="$showUser">
<xf:set var="$username"><xf:username user="{$post.User}" defaultname="{$post.username}" /></xf:set>
<li class="u-concealed message-attribution-user--top">{{ phrase('by_user_x', {'name':$username}) }}</li>
</xf:if>
<li class="u-concealed">
<a href="{{ link('threads/post', $thread, {'post_id': $post.post_id}) }}" rel="nofollow">
<xf:date time="{$post.post_date}" itemprop="datePublished" />
</a>
</li>
<xf:if is="$post.is_question_solution">
<li class="uix_solutionAttribution">
<span class="is-solution" data-xf-init="tooltip" title="{{ phrase('solution') }}"><xf:fa icon="fa-check-circle" /> {{ phrase('solution') }}</span>
</li>
</xf:if>
<xf:if is="$showReplyCount && $thread.reply_count">
<li class="u-concealed">
<a href="{{ link('threads', $thread) }}#posts">
<xf:fa icon="fa-comment" />
{$repliesPhrase|raw} {$thread.reply_count|number}
</a>
</li>
</xf:if>
</ul>
<ul class="message-attribution-opposite message-attribution-opposite--list {$oppositeClass}">
<xf:if is="$post.isUnread()">
<li><span class="message-newIndicator">{{ phrase('new') }}</span></li>
<xf:elseif is="$thread.isUnread() && $showThreadUnreadIndicator" />
<li><span class="message-newIndicator">{{ phrase('new_replies') }}</span></li>
</xf:if>
<li>
<a href="{{ link('threads/post', $thread, {'post_id': $post.post_id}) }}"
class="message-attribution-gadget"
data-xf-init="share-tooltip"
data-href="{{ link('posts/share', $post) }}"
aria-label="{{ phrase('share')|for_attr }}"
rel="nofollow">
<xf:fa icon="fa-share-alt"/>
</a>
</li>
<xf:if contentcheck="true">
<li>
<xf:contentcheck>
<xf:macro template="bookmark_macros" name="link"
arg-content="{$post}"
arg-class="message-attribution-gadget bookmarkLink--highlightable"
arg-confirmUrl="{{ link('posts/bookmark', $post) }}"
arg-showText="{{ false }}"/>
</xf:contentcheck>
</li>
</xf:if>
<xf:if is="$showPosition">
<li>
<a href="{{ link('threads/post', $thread, {'post_id': $post.post_id}) }}" rel="nofollow">
#{{ number($post.position + 1) }}
</a>
</li>
</xf:if>
</ul>
</header>
</xf:macro>
<xf:macro name="post_notices" arg-post="!" arg-thread="!">
<xf:if is="$post.message_state == 'deleted'">
<div class="messageNotice messageNotice--deleted">
<xf:macro template="deletion_macros" name="notice" arg-log="{$post.DeletionLog}" />
</div>
<xf:elseif is="$post.message_state == 'moderated'" />
<div class="messageNotice messageNotice--moderated">
{{ phrase('this_message_is_awaiting_moderator_approval_and_is_invisible_to_normal') }}
</div>
</xf:if>
<xf:if is="$post.warning_message">
<div class="messageNotice messageNotice--warning">
{$post.warning_message}
</div>
</xf:if>
<xf:if is="$post.isIgnored()">
<div class="messageNotice messageNotice--ignored">
{{ phrase('you_are_ignoring_content_by_this_member') }}
<xf:showignored />
</div>
</xf:if>
</xf:macro>
<xf:macro name="post_user_content" arg-post="!" arg-thread="!" arg-snippet="{{ false }}" arg-displayAds="{{ true }}">
<div class="message-userContent lbContainer js-lbContainer {{ $isIgnored ? 'is-ignored' : '' }}"
data-lb-id="post-{$post.post_id}"
data-lb-caption-desc="{{ $post.User ? $post.User.username : $post.username }} · {{ date_time($post.post_date) }}">
<xf:if is="$post.isFirstPost()">
<xf:macro template="custom_fields_macros" name="custom_fields_view"
arg-type="threads"
arg-group="before"
arg-onlyInclude="{$thread.Forum.field_cache}"
arg-set="{$thread.custom_fields}"
arg-wrapperClass="message-fields message-fields--before" />
</xf:if>
<article class="message-body js-selectToQuote">
<xf:if is="$displayAds">
<xf:ad position="post_above_content" arg-post="{$post}" />
</xf:if>
<xf:if is="$snippet">
{{ bb_code_snippet($post.message, 'post', $post, $snippet) }}
<xf:else />
{{ bb_code($post.message, 'post', $post) }}
</xf:if>
<div class="js-selectToQuoteEnd"> </div>
<xf:if is="$displayAds">
<xf:ad position="post_below_content" arg-post="{$post}" />
</xf:if>
</article>
<xf:if is="$post.isFirstPost()">
<xf:macro template="custom_fields_macros" name="custom_fields_view"
arg-type="threads"
arg-group="after"
arg-onlyInclude="{$thread.Forum.field_cache}"
arg-set="{$thread.custom_fields}"
arg-wrapperClass="message-fields message-fields--after" />
</xf:if>
<xf:if is="$post.attach_count">
<xf:macro template="message_macros" name="attachments"
arg-attachments="{$post.Attachments}"
arg-message="{$post}"
arg-canView="{{ $thread.canViewAttachments() }}" />
</xf:if>
</div>
</xf:macro>
<xf:macro name="post_last_edit" arg-post="!">
<xf:if is="$post.last_edit_date">
<div class="message-lastEdit">
<xf:if is="$post.user_id == $post.last_edit_user_id">
{{ phrase('last_edited:') }} <xf:date time="{$post.last_edit_date}" itemprop="dateModified" />
<xf:else />
{{ phrase('last_edited_by_moderator:') }} <xf:date time="{$post.last_edit_date}" itemprop="dateModified" />
</xf:if>
</div>
</xf:if>
</xf:macro>
<xf:macro name="post_footer" arg-post="!" arg-thread="!">
<footer class="message-footer">
<xf:if contentcheck="true">
<div class="message-actionBar actionBar">
<xf:contentcheck>
<xf:macro name="post_action_bar" arg-post="{$post}" arg-thread="{$thread}" />
</xf:contentcheck>
</div>
</xf:if>
<xf:comment> -- moved to above footer --
<div class="reactionsBar js-reactionsList {{ $post.reactions ? 'is-active' : '' }}">
<xf:reactions content="{$post}" link="posts/reactions" />
</div>
</xf:comment>
<div class="js-historyTarget message-historyTarget toggleTarget" data-href="trigger-href"></div>
</footer>
</xf:macro>
<xf:macro name="post_action_bar" arg-post="!" arg-thread="!">
<xf:if contentcheck="true">
<div class="actionBar-set actionBar-set--external">
<xf:contentcheck>
<xf:if is="{{ property('uix_voteActionButton') != 'never'}}">
<xf:if is="$post.isFirstPost()">
<xf:if is="$post.Thread.isContentVotingSupported()">
<span class="actionBar-action actionBar-action--vote">
<xf:macro template="content_vote_macros" name="vote_control"
arg-link="threads/vote"
arg-content="{$thread}" />
</span>
</xf:if>
<xf:else />
<xf:if is="$post.isContentVotingSupported()">
<span class="actionBar-action actionBar-action--vote">
<xf:macro template="content_vote_macros" name="vote_control"
arg-link="posts/vote"
arg-content="{$post}" />
</span>
</xf:if>
</xf:if>
</xf:if>
<xf:react content="{$post}" link="posts/react" list="< .js-post | .js-reactionsList" />
<xf:if is="$thread.canReply() OR $thread.canReplyPreReg()">
<xf:set var="$quoteLink">{{ link('threads/reply', $thread, {'quote': $post.post_id}) }}</xf:set>
<xf:if is="$xf.options.multiQuote AND $xf.visitor.user_id">
<a href="{$quoteLink}"
class="actionBar-action actionBar-action--mq u-jsOnly js-multiQuote"
title="{{ phrase('toggle_multi_quote_tooltip')|for_attr }}"
rel="nofollow"
data-message-id="{$post.post_id}"
data-mq-action="add">{{ phrase('quote') }}</a>
</xf:if>
<a href="{$quoteLink}"
class="actionBar-action actionBar-action--reply"
title="{{ phrase('reply_quoting_this_message')|for_attr }}"
rel="nofollow"
data-xf-click="quote"
data-quote-href="{{ link('posts/quote', $post) }}">{{ phrase('reply') }}</a>
</xf:if>
</xf:contentcheck>
</div>
</xf:if>
<xf:if contentcheck="true">
<div class="actionBar-set actionBar-set--internal">
<xf:contentcheck>
<xf:if is="$post.canUseInlineModeration()">
<span class="actionBar-action actionBar-action--inlineMod">
<xf:checkbox standalone="true">
<xf:option value="{$post.post_id}" class="js-inlineModToggle"
data-xf-init="tooltip"
title="{{ phrase('select_for_moderation') }}"
label="{{ phrase('select_for_moderation') }}"
hiddenlabel="true" />
</xf:checkbox>
</span>
</xf:if>
<xf:if is="$post.canReport()">
<a href="{{ link('posts/report', $post) }}"
class="actionBar-action actionBar-action--report"
data-xf-click="overlay">{{ phrase('report_verb') }}</a>
</xf:if>
<xf:set var="$hasActionBarMenu" value="{{ false }}" />
<xf:if is="$post.canEdit()">
<xf:js src="xf/message.js" min="1" />
<a href="{{ link('posts/edit', $post) }}"
class="actionBar-action actionBar-action--edit actionBar-action--menuItem"
data-xf-click="quick-edit"
data-editor-target="#js-post-{$post.post_id} .js-quickEditTarget"
data-menu-closer="true">{{ phrase('edit') }}</a>
<xf:set var="$hasActionBarMenu" value="{{ true }}" />
</xf:if>
<xf:if is="$post.edit_count && $post.canViewHistory()">
<a href="{{ link('posts/history', $post) }}"
class="actionBar-action actionBar-action--history actionBar-action--menuItem"
data-xf-click="toggle"
data-target="#js-post-{$post.post_id} .js-historyTarget"
data-menu-closer="true">{{ phrase('history') }}</a>
<xf:set var="$hasActionBarMenu" value="{{ true }}" />
</xf:if>
<xf:if is="$post.canDelete('soft')">
<a href="{{ link('posts/delete', $post) }}"
class="actionBar-action actionBar-action--delete actionBar-action--menuItem"
data-xf-click="overlay">{{ phrase('delete') }}</a>
<xf:set var="$hasActionBarMenu" value="{{ true }}" />
</xf:if>
<xf:if is="$post.message_state == 'deleted' AND $post.canUndelete()">
<a href="{{ link('posts/undelete', $post) }}"
class="actionBar-action actionBar-action--undelete actionBar-action--menuItem"
data-xf-click="overlay">{{ phrase('undelete') }}</a>
<xf:set var="$hasActionBarMenu" value="{{ true }}" />
</xf:if>
<xf:if is="$post.canCleanSpam()">
<a href="{{ link('spam-cleaner', $post) }}"
class="actionBar-action actionBar-action--spam actionBar-action--menuItem"
data-xf-click="overlay">{{ phrase('spam') }}</a>
<xf:set var="$hasActionBarMenu" value="{{ true }}" />
</xf:if>
<xf:if is="$xf.visitor.canViewIps() && $post.ip_id">
<a href="{{ link('posts/ip', $post) }}"
class="actionBar-action actionBar-action--ip actionBar-action--menuItem"
data-xf-click="overlay">{{ phrase('ip') }}</a>
<xf:set var="$hasActionBarMenu" value="{{ true }}" />
</xf:if>
<xf:if is="$post.canWarn()">
<a href="{{ link('posts/warn', $post) }}"
class="actionBar-action actionBar-action--warn actionBar-action--menuItem">{{ phrase('warn') }}</a>
<xf:set var="$hasActionBarMenu" value="{{ true }}" />
<xf:elseif is="$post.warning_id && $xf.visitor.canViewWarnings()" />
<a href="{{ link('warnings', {'warning_id': $post.warning_id}) }}"
class="actionBar-action actionBar-action--warn actionBar-action--menuItem"
data-xf-click="overlay">{{ phrase('view_warning') }}</a>
<xf:set var="$hasActionBarMenu" value="{{ true }}" />
</xf:if>
<xf:if is="$hasActionBarMenu">
<a class="actionBar-action actionBar-action--menuTrigger"
data-xf-click="menu"
title="{{ phrase('more_options')|for_attr }}"
role="button"
tabindex="0"
aria-expanded="false"
aria-haspopup="true">•••</a>
<div class="menu" data-menu="menu" aria-hidden="true" data-menu-builder="actionBar">
<div class="menu-content">
<h4 class="menu-header">{{ phrase('more_options') }}</h4>
<div class="js-menuBuilderTarget"></div>
</div>
</div>
</xf:if>
</xf:contentcheck>
</div>
</xf:if>
</xf:macro>
<xf:macro name="post_deleted" arg-post="!" arg-thread="!">
<xf:css src="message.less" />
<div class="message message--deleted message--post{{ $post.isIgnored() ? ' is-ignored' : '' }}{{ $post.isUnread() ? ' is-unread' : '' }} js-post js-inlineModContainer"
data-author="{{ $post.User.username ?: $post.username }}"
data-content="post-{$post.post_id}">
<span class="u-anchorTarget" id="post-{$post.post_id}"></span>
<div class="message-inner">
<div class="message-cell message-cell--user">
<xf:macro template="message_macros" name="user_info_simple" arg-user="{$post.User}" arg-fallbackName="{$post.username}" />
</div>
<div class="message-cell message-cell--main">
<div class="uix_messageContent">
<div class="message-attribution">
<ul class="listInline listInline--bullet message-attribution-main">
<li><a href="{{ link('threads/post', $thread, {'post_id': $post.post_id}) }}" class="u-concealed" rel="nofollow"><xf:date time="{$post.post_date}" /></a></li>
<li><xf:username user="{$post.User}" defaultname="{$post.username}" class="u-concealed" /></li>
</ul>
</div>
<div class="messageNotice messageNotice--deleted">
<xf:macro template="deletion_macros" name="notice" arg-log="{$post.DeletionLog}" />
<a href="{{ link('posts/show', $post) }}" class="u-jsOnly" data-xf-click="inserter" data-replace="[data-content=post-{$post.post_id}]">{{ phrase('show...') }}</a>
<xf:if is="$post.canUseInlineModeration()">
<span style="display: none">
<!-- this can be actioned on the full post -->
<xf:checkbox standalone="true">
<xf:option value="{$post.post_id}" class="js-inlineModToggle"
hiddenlabel="true" />
</xf:checkbox>
</span>
</xf:if>
</div>
</div>
</div>
</div>
</div>
<xf:ad position="post_below_container" arg-post="{$post}" />
</xf:macro>