Skip to content

Instantly share code, notes, and snippets.

@thearchduke
Created October 4, 2017 18:20
Show Gist options
  • Save thearchduke/428db0fadd28a5e175f3a154ccb143cb to your computer and use it in GitHub Desktop.
Save thearchduke/428db0fadd28a5e175f3a154ccb143cb to your computer and use it in GitHub Desktop.
Simple jQuery script for letting users check Wordpress comment for banned words & mismatched formatting
$(function(){
var LINTER_BUTTON_TEXT = 'Lint comment';
var BAD_WORDS = [];
var LINTER_MEMO = {};
function memoized(input) {
if (input in LINTER_MEMO === true) {
return LINTER_MEMO[input];
}
LINTER_MEMO[input] = checkWord(input);
return LINTER_MEMO[input];
}
function checkWord(word) {
word = word.toLowerCase();
var hasBadWord = false;
var badWord = null;
for (var i = 0; i < BAD_WORDS.length; i++) {
match = word.search(BAD_WORDS[i]) !== -1 ? true : false;
if (match === true) {
hasBadWord = true;
badWord = BAD_WORDS[i];
break
}
}
return {'word': badWord, 'naughty': hasBadWord};
}
function getElementStart(word) {
word = word.toLowerCase();
var startRegex = /<([a-zA-Z]+)>/;
var element = startRegex.exec(word);
if (element !== null && element.length > 0) {
return element[1];
}
return '';
}
function getElementEnd(word) {
word = word.toLowerCase();
var endRegex = /<\/([a-zA-Z]+)>/;
var element = endRegex.exec(word);
if (element !== null && element.length > 0) {
return element[1];
}
return '';
}
$('#commentform').append('<a id="linter-button" href="#commentform">' + LINTER_BUTTON_TEXT + '</a><br />');
$('#commentform').append('<p id="linted-comment"></p>');
$('#linter-button').click(function(){
event.preventDefault();
var commentText = $('#comment').val();
//var noPunctuationLstrip = commentText.replace(/ [.,\/#!$%\^&\*;:{}=\-_`~()]/g,"");
//var noPunctuation = noPunctuationLstrip.replace(/[.,\/#!$%\^&\*;:{}=\-_`~()] /g,"");
var words = commentText.split(' ');
var linted = '';
var elementTracker = [];
for (var i = 0; i < words.length; i++) {
result = memoized(words[i]);
if (result.naughty === true) {
linted += ' <span style="color: red;">' + words[i] + ' [' + result.word + ']</span>';
} else {
linted += ' ' + words[i];
}
elementStart = getElementStart(words[i]);
if (elementStart !== '') {
elementTracker.push(elementStart);
}
elementEnd = getElementEnd(words[i]);
if (elementEnd !== '') {
var mismatch = elementEnd !== elementTracker[elementTracker.length-1];
if (mismatch === true) {
linted += ' <span style="color: green">[Mismatched element: ' + elementTracker[elementTracker.length-1] + ', ' + elementEnd + ' ]</span>';
} else {
elementTracker.pop();
}
}
}
$('#linted-comment').html(linted);
});
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment