Help > Forum > Topics & Posts > Limiting the number of words in a post
Limiting the number of words in a post
You can set a word limit for new topics or replies by following the steps below. A word counter will appear beneath the text box to help users stay within the limit, and they won’t be able to submit their posts if they go over. Moderators and administrators are exempt from this limit.
- Log in to your Website Toolbox account.
- Click the Integrate link in the main menu.
- Click the HTML link.
- Copy the HTML code below into the Forum Head Tag HTML Code text box.
<script> var maximumWords = 100; window.addEventListener("load", function () { if (!isAdministratorOrModerator()) { if(jQ("#PostTopic").length) { waitForEditor("message", function () { setupWordCountObserver("message"); }); jQ("#post_submit, #previewpost_sbt").on("click", function () { if (showErrorMessage("message") === 1) { return false; } else { removeWordCountMessage("message"); } }); } if (jQ("#posts-list").length) { checkEditorLoaded(); jQ("#reply_submit, #submitreply").on("click", function () { if (showErrorMessage("message") === 1) { return false; } else { removeWordCountMessage("message"); } }); jQ(document).on("click", "[id^='save_']", function () { var savePostId = jQ(this).closest(".post-body-content").find("textarea").attr("id"); savePostId = savePostId.replace("message", ""); var postEditEditorId = "message" + parseInt(savePostId); if (showErrorMessage(postEditEditorId) === 1) { var editor = tinymce.get(postEditEditorId); if (editor && editor.startContent) { editor.setContent(editor.startContent); } return false; } else { removeWordCountMessage(postEditEditorId); } }); } } }); function checkEditorLoaded() { const observer = new MutationObserver((mutations, obs) => { for (const mutation of mutations) { for (const node of mutation.addedNodes) { if (node.nodeType === 1 && /^message\d*_ifr$/.test(node.id)) { var messageId = node.id.replace("_ifr", ""); waitForEditor(messageId, function () { setupWordCountObserver(messageId); }); } } } }); observer.observe(document.body, { childList: true, subtree: true }); } function waitForEditor(id, callback) { const interval = setInterval(() => { const editor = tinymce.get(id); if (editor && editor.initialized) { clearInterval(interval); callback(editor); } }, 100); } function setupWordCountObserver(id) { const editor = tinymce.get(id); if (!editor) return; showWordCountMessage(id); // Update message on any change editor.on("input", function () { showWordCountMessage(id); }); editor.on("change", function () { showWordCountMessage(id); }); editor.on("undo redo paste", function () { showWordCountMessage(id); }); } function isAdministratorOrModerator() { return jQ(".dropdown-menu .admin_user:not(.hidden)").length || jQ(".dropdown-menu .moderator_user:not(.hidden)").length; } function countWords(str) { return str .replace(/<\/?a[^>]*>/g, '') .replace(/(<[^>]*>)+/gi, '') .replace(/&(.*?);/gi, ' ') .replace(/(^\s*)|(\s*$)/gi, '') .replace(/\n/g, ' ') .replace(/\s+/g, ' ') .trim() .split(' ') .filter(Boolean) .length; } function showErrorMessage(id) { let postContent = ""; const editor = tinymce.get(id); if (editor) { postContent = editor.getContent(); } else { postContent = jQ("#" + id).val(); } const totalWord = countWords(postContent); if (!isAdministratorOrModerator() && totalWord > maximumWords) { wtbx.dialog.alert("Error: The text that you have entered is too long (" + totalWord + " words). Please shorten it to " + numberWithCommas(maximumWords) + " words."); return 1; } return 0; } function showWordCountMessage(id) { const editor = tinymce.get(id); if (!editor) return; const content = editor.getContent(); const totalWord = countWords(content); let message = ""; if (totalWord && totalWord <= 100) { message = '<span style="color: #27415f !important; padding-top:10px; font-weight:bold;">' + totalWord + '</span>'; } else if (totalWord > 100) { message = '<span style="color: #dc2f2f; padding-top:10px; font-weight:bold;">' + totalWord + '</span>'; } if (message) { let wordText = 'word'; if(totalWord > 1) { wordText = 'words'; } message = 'You\'ve typed ' + message + ' '+wordText+'. Your submission must not exceed ' + numberWithCommas(maximumWords) + ' words.'; } const containerId = 'errorMessage' + id; const existingContainer = jQ('#' + containerId); if (!existingContainer.length) { const editorContainer = jQ(editor.iframeElement).closest('.mce-tinymce'); editorContainer.after('
' + message + ''); } else { existingContainer.html(message); } } function removeWordCountMessage(id) { jQ('#errorMessage' + id).remove(); } function numberWithCommas(num) { return num.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ","); } </script> <style> #errorMessagemessage:has(span), #errorMessagemessage1:has(span) { font-size: 14px; color: #777; } #quickReplyPost #errorMessagemessage:has(span) ~ #reply_options { margin-top: -70px; } #quickReplyPost:has(#showCaptcha:not(.hidden)) #errorMessagemessage:has(span) ~ #reply_options { margin-top: -6px; } @media (max-width: 767px) { #quickReplyPost #errorMessagemessage:has(span) ~ #reply_options { margin-top: -87px; } } @media (max-width: 555px) { #quickReplyPost [id^="showCaptcha"]:not(.hidden) ~ .reply-menu .reply-options { margin-top: -187px; } } </style> - On the second line of the code you copy/pasted, change the number next to maximumWords to the maximim number of words you would like to allow.
- Save the changes.
If you still need help, please contact us.