Help > Forum > Tópicos e Posts > Limitar o número de palavras em uma postagem

Limitar o número de palavras em uma postagem

Você pode definir um limite de palavras para novos tópicos ou respostas seguindo as etapas abaixo. Um contador de palavras aparecerá abaixo da caixa de texto para ajudar os usuários a permanecerem dentro do limite, e eles não poderão enviar suas postagens se revisarem. Moderadores e administradores estão isentos desse limite.

  1. Faça login na sua conta do Website Toolbox.
  2. Clique no Integrar link no menu principal.
  3. Clique no HTML link.
  4. Copie o código HTML abaixo para o Código HTML da tag principal do fórum caixa de texto.

    <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 <= '< (totalword + 100) else if message="<span style="color: #27415f !important; padding-top:10px; font-weight:bold;">" span>'; 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>
  5. Na segunda linha do código que você copiou/colou, altere o número ao lado de Máximo de palavras até o número máximo de palavras que você gostaria de permitir.
  6. Salvar as mudanças.


If you still need help, please contact us.