← Скрипты · Счётчик символов
counter Счётчик символов в постах
бесплатноПоказывает под каждым постом, сколько в нём знаков — чтобы начислять монеты за пост и не лезть каждый раз в «Редактирование» ради уточнения объёма.
why Зачем он нужен
- Число знаков видно прямо под постом — при сведении банка не нужно открывать каждое сообщение в «Редактировании».
- Считается только текст поста: подпись, маска персонажа, скрытый текст и строка «Отредактировано» в счёт не идут — монеты честные, по чистому тексту.
- Работает только в выбранных вами разделах (эпизодах), первый пост темы — шапку эпизода — пропускает (можно включить).
- Пересчитывается само, когда на странице подгружаются новые посты.
setup Как поставить
-
Вставьте код
Админка → Формы → HTML верх (или «HTML низ» — без разницы). Вставьте код ниже. jQuery на Rusff и MyBB уже есть.
-
Укажите разделы
Вверху кода в
allowedForumsвпишите номера своих разделов. Номер виден в адресе:viewforum.php?id=11→ это 11, несколько через запятую. -
Первый пост
Шапку эпизода скрипт не считает. Нужно считать и её — поставьте
countFirstPost = 1вместо0. -
Под свой дизайн
Число выводится в блоке
.send-sumb— подгоните его под оформление форума в «Своём стиле»: размер, цвет, можно добавить подпись «знаков:».
<script>
(function ($) {
'use strict';
if (typeof $ === 'undefined') return;
/* ===== НАСТРОЙКИ ===== */
// В каких разделах считать (номер из адреса viewforum.php?id=11 -> 11), через запятую:
var allowedForums = [11, 12, 13];
// Считать ли первый пост (шапку эпизода): 0 - пропускать, 1 - считать:
var countFirstPost = 0;
/* ===== дальше не трогать ===== */
var firstPostClass = 'topicpost';
var allowed = new Set(allowedForums.map(Number));
function isForumAllowed() {
if (typeof FORUM !== 'undefined' && FORUM.topic && typeof FORUM.topic.forum_id !== 'undefined') return allowed.has(+FORUM.topic.forum_id);
var f = document.querySelector('#pun-viewtopic[data-forum-id]');
return f ? allowed.has(+f.dataset.forumId) : false;
}
function countText(el) {
var total = 0;
(function walk(n){ if(n.nodeType===3){total+=n.nodeValue.length;return;} if(n.nodeType!==1)return; if(n.tagName==='BR'){total+=1;return;} for(var i=0;i<n.childNodes.length;i++)walk(n.childNodes[i]); })(el);
return total;
}
function proc(pc) {
var $pc = $(pc), $post = $pc.closest('.post');
if (!countFirstPost && $post.hasClass(firstPostClass)) return;
$pc.children('.send-sumb').remove();
var $p = $pc.find('p:not(.lastedit)').filter(function(){ return !$(this).closest('.post-sig, .hvmask').length; });
var total = 0;
$p.each(function(i){ total += countText(this); if(i>0) total += 2; });
var $c = $('<div class="send-sumb"></div>').text(total);
var $s = $pc.find('.post-sig').first();
if ($s.length) $c.insertBefore($s); else $pc.append($c);
}
function all(ctx){ (ctx?$(ctx):$(document)).find('.post-content').each(function(){ proc(this); }); }
$(function () {
if (!isForumAllowed()) return;
var vt = document.getElementById('pun-viewtopic'); if (!vt) return;
all(vt);
$(document).ajaxComplete(function(){ all(vt); });
if (!window.MutationObserver) return;
new MutationObserver(function(mu){ for(var a=0;a<mu.length;a++){var ad=mu[a].addedNodes; for(var b=0;b<ad.length;b++){var nd=ad[b]; if(!(nd instanceof HTMLElement))continue; if(nd.matches('.post-content'))proc(nd); else if(nd.querySelectorAll)nd.querySelectorAll('.post-content').forEach(proc);}} }).observe(vt,{childList:true,subtree:true});
});
})(window.jQuery);
</script>
more Нужен другой скрипт?
Это подарок — пользуйтесь. А если нужен скрипт под вашу задачу (кубики, автоподсчёты, оформление) — напишите, скажу, получится ли и сколько будет стоить.
Написать в Telegram