// Generated by Documenter.jl requirejs.config({ paths: { 'minisearch': 'https://cdn.jsdelivr.net/npm/minisearch@6.1.0/dist/umd/index.min', 'jquery': 'https://cdnjs.cloudflare.com/ajax/libs/jquery/3.7.0/jquery.min', } }); //////////////////////////////////////////////////////////////////////////////// require(['jquery', 'minisearch'], function($, minisearch) { // In general, most search related things will have "search" as a prefix. // To get an in-depth about the thought process you can refer: https://hetarth02.hashnode.dev/series/gsoc let results = []; let timer = undefined; let data = documenterSearchIndex["docs"].map((x, key) => { x["id"] = key; // minisearch requires a unique for each object return x; }); // list below is the lunr 2.1.3 list minus the intersect with names(Base) // (all, any, get, in, is, only, which) and (do, else, for, let, where, while, with) // ideally we'd just filter the original list but it's not available as a variable const stopWords = new Set([ "a", "able", "about", "across", "after", "almost", "also", "am", "among", "an", "and", "are", "as", "at", "be", "because", "been", "but", "by", "can", "cannot", "could", "dear", "did", "does", "either", "ever", "every", "from", "got", "had", "has", "have", "he", "her", "hers", "him", "his", "how", "however", "i", "if", "into", "it", "its", "just", "least", "like", "likely", "may", "me", "might", "most", "must", "my", "neither", "no", "nor", "not", "of", "off", "often", "on", "or", "other", "our", "own", "rather", "said", "say", "says", "she", "should", "since", "so", "some", "than", "that", "the", "their", "them", "then", "there", "these", "they", "this", "tis", "to", "too", "twas", "us", "wants", "was", "we", "were", "what", "when", "who", "whom", "why", "will", "would", "yet", "you", "your", ]); let index = new minisearch({ fields: ["title", "text"], // fields to index for full-text search storeFields: ["location", "title", "text", "category", "page"], // fields to return with search results processTerm: (term) => { let word = stopWords.has(term) ? null : term; if (word) { // custom trimmer that doesn't strip @ and !, which are used in julia macro and function names word = word .replace(/^[^a-zA-Z0-9@!]+/, "") .replace(/[^a-zA-Z0-9@!]+$/, ""); } return word ?? null; }, // add . as a separator, because otherwise "title": "Documenter.Anchors.add!", would not find anything if searching for "add!", only for the entire qualification tokenize: (string) => string.split(/[\s\-\.]+/), // options which will be applied during the search searchOptions: { boost: { title: 100 }, fuzzy: 2, processTerm: (term) => { let word = stopWords.has(term) ? null : term; if (word) { word = word .replace(/^[^a-zA-Z0-9@!]+/, "") .replace(/[^a-zA-Z0-9@!]+$/, ""); } return word ?? null; }, tokenize: (string) => string.split(/[\s\-\.]+/), }, }); index.addAll(data); let filters = [...new Set(data.map((x) => x.category))]; var modal_filters = make_modal_body_filters(filters); var filter_results = []; $(document).on("keyup", ".documenter-search-input", function (event) { // Adding a debounce to prevent disruptions from super-speed typing! debounce(() => update_search(filter_results), 300); }); $(document).on("click", ".search-filter", function () { if ($(this).hasClass("search-filter-selected")) { $(this).removeClass("search-filter-selected"); } else { $(this).addClass("search-filter-selected"); } // Adding a debounce to prevent disruptions from crazy clicking! debounce(() => get_filters(), 300); }); /** * A debounce function, takes a function and an optional timeout in milliseconds * * @function callback * @param {number} timeout */ function debounce(callback, timeout = 300) { clearTimeout(timer); timer = setTimeout(callback, timeout); } /** * Make/Update the search component * * @param {string[]} selected_filters */ function update_search(selected_filters = []) { let initial_search_body = `
${display_result}