--- trac_keywords.orig.js 2019-03-03 14:51:04.000000000 +0100 +++ trac_keywords_20190309b.js 2019-03-09 17:36:37.000000000 +0100 @@ -1,39 +1,52 @@ jQuery(function($) { field_id = document.getElementById('tags') ? "tags" : "field-keywords"; + + // toggle (remove or add) a keyword tag to the field function addRemoveTag(w) { var el = document.getElementById(field_id); var orig = el.value; - var newval = orig.replace(new RegExp('\\b' + w + '\\b'), ''); + // remove the keyword including white spaces and separator, match case-insensitive + var filter = function(v) { + return v.length !== w.length || v.toLowerCase() !== w.toLowerCase(); + }; + var newval = $.grep(orig.split(/[;,\s]+/), filter).join(' '); var link = document.getElementById('trac-keyword-' + w); - if (orig != newval) { // remove tag. + if (orig != newval) { // keyword remove if(link) link.className = ''; - } else { + } else { // keyword add newval = orig + (orig ? ' ' : '') + w; if(link) link.className = 'trac-keyword'; } - el.value = newval.replace(/^\s+|\s+$/, ''); + //strip leading and trailing white spaces and separator + el.value = newval.replace(/^[;,\s]+|[;,\s]+$/, ''); } + if($('#trac-keywords').length > 0) {return}// avoid duplicate insertion of keyword section var $fieldset = $('
'); $fieldset.append('') $ul = $('