Skip to content

Instantly share code, notes, and snippets.

@rafcontreras
Last active April 30, 2021 22:54
Show Gist options
  • Save rafcontreras/9ff0b1c1c1f266895e8f8c1519cafcd3 to your computer and use it in GitHub Desktop.
Save rafcontreras/9ff0b1c1c1f266895e8f8c1519cafcd3 to your computer and use it in GitHub Desktop.
javascript:(function()%7Bvar%20select2%20%3D%20%7B%0A%20%20js%3A%20%22https%3A%2F%2Fcdnjs.cloudflare.com%2Fajax%2Flibs%2Fselect2%2F4.0.13%2Fjs%2Fselect2.min.js%22%2C%0A%20%20css%3A%0A%20%20%20%20%22https%3A%2F%2Fcdnjs.cloudflare.com%2Fajax%2Flibs%2Fselect2%2F4.0.13%2Fcss%2Fselect2.min.css%22%2C%0A%20%20jquery%3A%20%22https%3A%2F%2Fcdnjs.cloudflare.com%2Fajax%2Flibs%2Fjquery%2F3.6.0%2Fjquery.min.js%22%2C%0A%20%20fuse%3A%20%22https%3A%2F%2Fcdn.jsdelivr.net%2Fnpm%2Ffuse.js%2Fdist%2Ffuse.js%22%0A%7D%3B%0A%0Afunction%20matchCustom(params%2C%20data)%20%7B%0A%20%20if%20(jQuery.trim(params.term)%20%3D%3D%3D%20%22%22)%20%7B%0A%20%20%20%20return%20data%3B%0A%20%20%7D%0A%20%20if%20(typeof%20data.text%20%3D%3D%3D%20%22undefined%22)%20%7B%0A%20%20%20%20return%20null%3B%0A%20%20%7D%0A%20%20var%20text%20%3D%20data.text.trim()%3B%0A%20%20var%20term%20%3D%20params.term.trim()%3B%0A%20%20var%20array%20%3D%20%5B%7B%20text%3A%20text%20%7D%5D%3B%0A%20%20var%20fuse%20%3D%20new%20Fuse(array%2C%20%7B%0A%20%20%20%20keys%3A%20%5B%22text%22%5D%2C%0A%20%20%20%20includeScore%3A%20true%0A%20%20%7D)%3B%0A%20%20var%20search%20%3D%20fuse.search(term)%5B0%5D%3B%0A%20%20if%20(search%20%26%26%20search.score%20%26%26%20search.score%20%3C%3D%200.8)%20%7B%0A%20%20%20%20var%20modifiedData%20%3D%20jQuery.extend(%7B%7D%2C%20data%2C%20true)%3B%0A%20%20%20%20return%20modifiedData%3B%0A%20%20%7D%0A%20%20return%20null%3B%0A%7D%0A%0Afunction%20loadScript(src%2C%20callback)%20%7B%0A%20%20var%20script%20%3D%20document.createElement(%22script%22)%3B%0A%20%20script.onload%20%3D%20function%20()%20%7B%0A%20%20%20%20callback()%3B%0A%20%20%7D%3B%0A%0A%20%20script.onerror%20%3D%20function%20(err)%20%7B%0A%20%20%20%20callback(err)%3B%0A%20%20%7D%3B%0A%0A%20%20script.src%20%3D%20src%3B%0A%20%20document.body.appendChild(script)%3B%0A%7D%0A%0Afunction%20loadCss(src%2C%20callback)%20%7B%0A%20%20select2.link%20%3D%20document.createElement(%22link%22)%3B%0A%20%20select2.link.onload%20%3D%20function%20()%20%7B%0A%20%20%20%20callback()%3B%0A%20%20%7D%3B%0A%0A%20%20select2.link.onerror%20%3D%20function%20(err)%20%7B%0A%20%20%20%20callback(err)%3B%0A%20%20%7D%3B%0A%0A%20%20select2.link.href%20%3D%20src%3B%0A%20%20select2.link.rel%20%3D%20%22stylesheet%22%3B%0A%20%20select2.link.type%20%3D%20%22text%2Fcss%22%3B%0A%0A%20%20document.body.appendChild(select2.link)%3B%0A%7D%0A%0Afunction%20loadJQuery(callback)%20%7B%0A%20%20if%20(window.jquery%20%7C%7C%20window.jQuery)%20%7B%0A%20%20%20%20return%20callback()%3B%0A%20%20%7D%0A%0A%20%20loadScript(select2.jquery%2C%20callback)%3B%0A%7D%0A%0Afunction%20loadResources()%20%7B%0A%20%20loadCss(select2.css%2C%20function%20(errCSS)%20%7B%0A%20%20%20%20if%20(errCSS)%20%7B%0A%20%20%20%20%20%20return%3B%0A%20%20%20%20%7D%0A%20%20%20%20loadScript(select2.fuse%2C%20function%20(errFuse)%20%7B%0A%20%20%20%20%20%20if%20(errFuse)%20%7B%0A%20%20%20%20%20%20%20%20return%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20loadJQuery(function%20(errjQuery)%20%7B%0A%20%20%20%20%20%20%20%20if%20(errjQuery)%20%7B%0A%20%20%20%20%20%20%20%20%20%20return%3B%0A%20%20%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20%20%20loadScript(select2.js%2C%20function%20(errSelect)%20%7B%0A%20%20%20%20%20%20%20%20%20%20if%20(errSelect)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20return%3B%0A%20%20%20%20%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20%20%20%20%20var%20selects%20%3D%20%5B%5D.slice.call(document.querySelectorAll(%22select%22))%3B%0A%0A%20%20%20%20%20%20%20%20%20%20selects.forEach(function%20(el)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20jQuery(el).select2(%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20matcher%3A%20matchCustom%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D)%3B%0A%20%20%20%20%20%20%20%20%20%20%7D)%3B%0A%20%20%20%20%20%20%20%20%7D)%3B%0A%20%20%20%20%20%20%7D)%3B%0A%20%20%20%20%7D)%3B%0A%20%20%7D)%3B%0A%7D%0A%0AloadResources()%3B%7D)()%3B
var select2 = {
js: "https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.13/js/select2.min.js",
css:
"https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.13/css/select2.min.css",
jquery: "https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js",
fuse: "https://cdn.jsdelivr.net/npm/fuse.js/dist/fuse.js"
};
function matchCustom(params, data) {
if (jQuery.trim(params.term) === "") {
return data;
}
if (typeof data.text === "undefined") {
return null;
}
var text = data.text.trim();
var term = params.term.trim();
var array = [{ text: text }];
var fuse = new Fuse(array, {
keys: ["text"],
includeScore: true
});
var search = fuse.search(term)[0];
if (search && search.score && search.score <= 0.8) {
var modifiedData = jQuery.extend({}, data, true);
return modifiedData;
}
return null;
}
function loadScript(src, callback) {
var script = document.createElement("script");
script.onload = function () {
callback();
};
script.onerror = function (err) {
callback(err);
};
script.src = src;
document.body.appendChild(script);
}
function loadCss(src, callback) {
select2.link = document.createElement("link");
select2.link.onload = function () {
callback();
};
select2.link.onerror = function (err) {
callback(err);
};
select2.link.href = src;
select2.link.rel = "stylesheet";
select2.link.type = "text/css";
document.body.appendChild(select2.link);
}
function loadJQuery(callback) {
if (window.jquery || window.jQuery) {
return callback();
}
loadScript(select2.jquery, callback);
}
function loadResources() {
loadCss(select2.css, function (errCSS) {
if (errCSS) {
return;
}
loadScript(select2.fuse, function (errFuse) {
if (errFuse) {
return;
}
loadJQuery(function (errjQuery) {
if (errjQuery) {
return;
}
loadScript(select2.js, function (errSelect) {
if (errSelect) {
return;
}
var selects = [].slice.call(document.querySelectorAll("select"));
selects.forEach(function (el) {
jQuery(el).select2({
matcher: matchCustom
});
});
});
});
});
});
}
loadResources();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment