You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
78 lines
2.3 KiB
78 lines
2.3 KiB
var _queryBeingDone = null;
|
|
var _pattern = null;
|
|
var _escapedRegex = /[-\/\\^$*+?.()|[\]{}]/g;
|
|
function escapeRegex(e) {
|
|
return e.replace(_escapedRegex, '\\$&');
|
|
}
|
|
|
|
// for some reason Sphinx shows some entries twice
|
|
// if something has been scored already I'd rather sort it to the bottom
|
|
var _beenScored = new Set();
|
|
|
|
function __score(haystack, regex) {
|
|
let match = regex.exec(haystack);
|
|
if(match == null) {
|
|
return Number.MAX_VALUE;
|
|
}
|
|
let subLength = match[0].length;
|
|
let start = match.index;
|
|
return (subLength * 1000 + start) / 1000.0;
|
|
}
|
|
|
|
// unused for now
|
|
function __cleanNamespaces(query) {
|
|
return query.replace(/(discord\.(ext\.)?)?(.+)/, '$3');
|
|
}
|
|
|
|
var Scorer = {
|
|
// Implement the following function to further tweak the score for each result
|
|
// The function takes a result array [filename, title, anchor, descr, score]
|
|
// and returns the new score.
|
|
|
|
score: function(result) {
|
|
// only inflate the score of things that are actual API reference things
|
|
if(_pattern !== null && result[1].startsWith('discord.')) {
|
|
let _score = __score(result[1], _pattern);
|
|
if(_score === Number.MAX_VALUE) {
|
|
return result[4];
|
|
}
|
|
if(_beenScored.has(result[1])) {
|
|
return 0;
|
|
}
|
|
_beenScored.add(result[1]);
|
|
let newScore = 100 + _queryBeingDone.length - _score;
|
|
// console.log(`${result[1]}: ${result[4]} -> ${newScore} (${_score})`);
|
|
return newScore;
|
|
}
|
|
return result[4];
|
|
},
|
|
|
|
|
|
// query matches the full name of an object
|
|
objNameMatch: 15,
|
|
// or matches in the last dotted part of the object name
|
|
objPartialMatch: 11,
|
|
// Additive scores depending on the priority of the object
|
|
objPrio: {0: 15, // used to be importantResults
|
|
1: 7, // used to be objectResults
|
|
2: -5}, // used to be unimportantResults
|
|
// Used when the priority is not in the mapping.
|
|
objPrioDefault: 0,
|
|
|
|
// query found in title
|
|
title: 15,
|
|
partialTitle: 7,
|
|
// query found in terms
|
|
term: 5,
|
|
partialTerm: 2
|
|
};
|
|
|
|
|
|
$(document).ready(function() {
|
|
let params = $.getQueryParameters();
|
|
if(params.q) {
|
|
_queryBeingDone = params.q[0];
|
|
let pattern = Array.from(_queryBeingDone).map(escapeRegex).join('.*?');
|
|
_pattern = new RegExp(pattern, 'i');
|
|
}
|
|
});
|
|
|