mirror of
https://github.com/Rapptz/discord.py.git
synced 2025-04-21 00:07:51 +00:00
This makes the other pages take less priority than the API results. It's kind of biased, but hopefully it helps out.
79 lines
2.3 KiB
JavaScript
79 lines
2.3 KiB
JavaScript
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');
|
|
}
|
|
});
|