51 lines
1.4 KiB
JavaScript
51 lines
1.4 KiB
JavaScript
import $ from 'jquery';
|
|
import getSlug from 'speakingurl';
|
|
|
|
// jQuery no parents filter
|
|
$.expr[':']['noparents'] = $.expr.createPseudo((text) => (element) => $(element).parents(text).length < 1);
|
|
|
|
// Slugify
|
|
// CommonJS and ES6 version of https://github.com/madflow/jquery-slugify
|
|
$.fn.slugify = (source, options) => {
|
|
return this.each((element) => {
|
|
let target = $(element);
|
|
let source = $(source);
|
|
|
|
target.on('keyup change', () => {
|
|
target.data('locked', target.val() !== '' && target.val() !== undefined);
|
|
});
|
|
|
|
source.on('keyup change', () => {
|
|
if (target.data('locked') === true) { return true; }
|
|
|
|
let isInput = target.is('input') || target.is('textarea');
|
|
target[isInput ? 'val' : 'text']($.slugify(source.val(), options));
|
|
});
|
|
});
|
|
};
|
|
|
|
// Static method.
|
|
$.slugify = (sourceString, options) => {
|
|
options = $.extend({}, $.slugify.options, options);
|
|
options.lang = options.lang || $('html').prop('lang');
|
|
|
|
if (typeof options.preSlug === 'function') {
|
|
sourceString = options.preSlug(sourceString);
|
|
}
|
|
|
|
sourceString = options.slugFunc(sourceString, options);
|
|
|
|
if (typeof options.postSlug === 'function') {
|
|
sourceString = options.postSlug(sourceString);
|
|
}
|
|
|
|
return sourceString;
|
|
};
|
|
|
|
// Default plugin options
|
|
$.slugify.options = {
|
|
preSlug: null,
|
|
postSlug: null,
|
|
slugFunc: (input, opts) => getSlug(input, opts)
|
|
};
|