src/directive/mark.js (35 lines of code) (raw):
import Mark from 'mark.js';
import Vue from 'vue';
import {debounce} from 'lodash-es';
function doMark(el, keywords) {
let instance = el.__markInstance;
function doMark() {
el.__markInstance.mark(keywords, {
diacritics: true,
separateWordSearch: true
});
}
if (!instance) {
el.__markInstance = new Mark(el);
doMark();
}
else {
el.__markInstance.unmark({
done() {
doMark();
}
});
}
}
Vue.directive('mark', {
inserted(el, binding) {
el.__doMarkDebounced = debounce(doMark, 500, {
trailing: true,
leading: false
});
el.__doMarkDebounced(el, binding.value);
},
update(el, binding) {
el.__doMarkDebounced(el, binding.value);
}
});