Skip to content

Instantly share code, notes, and snippets.

@mattip
Last active August 28, 2020 14:49
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save mattip/75f97b4cbf639d892af47be49c468fe9 to your computer and use it in GitHub Desktop.
Save mattip/75f97b4cbf639d892af47be49c468fe9 to your computer and use it in GitHub Desktop.
searching affiliate websites
diff --git a/sphinx/themes/basic/static/searchtools.js b/sphinx/themes/basic/static/searchtools.js
index 970d0d975..90fd3a0f6 100644
--- a/sphinx/themes/basic/static/searchtools.js
+++ b/sphinx/themes/basic/static/searchtools.js
@@ -107,6 +107,13 @@ var Search = {
this._queued_query = query;
},
+ setAffiliate : function(index) {
+ if (this._affiliates == null) {
+ this._affiliates = [];
+ }
+ this._affiliates.push(index);
+ },
+
stopPulse : function() {
this._pulse_status = 0;
},
@@ -197,8 +205,7 @@ var Search = {
// console.info('excluded: ', excluded);
// prepare search
- var terms = this._index.terms;
- var titleterms = this._index.titleterms;
+ var rootUrl = DOCUMENTATION_OPTIONS.URL_ROOT;
// array of [filename, title, anchor, descr, score]
var results = [];
@@ -208,11 +215,18 @@ var Search = {
for (i = 0; i < objectterms.length; i++) {
var others = [].concat(objectterms.slice(0, i),
objectterms.slice(i+1, objectterms.length));
- results = results.concat(this.performObjectSearch(objectterms[i], others));
+ results = results.concat(this.performObjectSearch(objectterms[i], others, this._index, rootUrl));
+ if (this._affiliates) {
+ for (j = 0; j < this._affiliates.length; j++) {
+ var index = this._affiliates[j];
+ results = results.concat(this.performObjectSearch(objectterms[i], others, index, index.rootUrl));
+
+ }
+ }
}
// lookup as search terms in fulltext
- results = results.concat(this.performTermsSearch(searchterms, excluded, terms, titleterms));
+ results = results.concat(this.performTermsSearch(searchterms, excluded, this._index, rootUrl));
// let the scorer override scores with a custom scoring function
if (Scorer.score) {
@@ -250,7 +264,7 @@ var Search = {
var item = results.pop();
var listItem = $('<li style="display:none"></li>');
var requestUrl = "";
+ var rootUrl = item[6] || DOCUMENTATION_OPTIONS.URL_ROOT;
if (DOCUMENTATION_OPTIONS.BUILDER === 'dirhtml') {
// dirhtml builder
var dirname = item[0] + '/';
@@ -259,16 +273,14 @@ var Search = {
} else if (dirname == 'index/') {
dirname = '';
}
- requestUrl = DOCUMENTATION_OPTIONS.URL_ROOT + dirname;
+ requestUrl = rootUrl + dirname;
linkUrl = requestUrl;
} else {
// normal html builders
- requestUrl = DOCUMENTATION_OPTIONS.URL_ROOT + item[0] + DOCUMENTATION_OPTIONS.FILE_SUFFIX;
+ requestUrl = rootUrl + item[0] + DOCUMENTATION_OPTIONS.FILE_SUFFIX;
linkUrl = item[0] + DOCUMENTATION_OPTIONS.LINK_SUFFIX;
}
listItem.append($('<a/>').attr('href',
linkUrl +
highlightstring + item[2]).html(item[1]));
if (item[3]) {
listItem.append($('<span> (' + item[3] + ')</span>'));
@@ -314,12 +326,12 @@ var Search = {
/**
* search for object names
*/
- performObjectSearch : function(object, otherterms) {
- var filenames = this._index.filenames;
- var docnames = this._index.docnames;
- var objects = this._index.objects;
- var objnames = this._index.objnames;
- var titles = this._index.titles;
+ performObjectSearch : function(object, otherterms, index, rootUrl) {
+ var filenames = index.filenames;
+ var docnames = index.docnames;
+ var objects = index.objects;
+ var objnames = index.objnames;
+ var titles = index.titles;
var i;
var results = [];
@@ -371,7 +383,7 @@ var Search = {
} else {
score += Scorer.objPrioDefault;
}
- results.push([docnames[match[0]], fullname, '#'+anchor, descr, score, filenames[match[0]]]);
+ results.push([docnames[match[0]], fullname, '#'+anchor, descr, score, filenames[match[0]], rootUrl]);
}
}
}
@@ -382,10 +394,12 @@ var Search = {
/**
* search for full-text terms in the index
*/
- performTermsSearch : function(searchterms, excluded, terms, titleterms) {
- var docnames = this._index.docnames;
- var filenames = this._index.filenames;
- var titles = this._index.titles;
+ performTermsSearch : function(searchterms, excluded, index, rootUrl) {
+ var terms = index.terms;
+ var titleterms = index.titleterms;
+ var docnames = index.docnames;
+ var filenames = index.filenames;
+ var titles = index.titles;
var i, j, file;
var fileMap = {};
@@ -475,7 +489,7 @@ var Search = {
// select one (max) score for the file.
// for better ranking, we should calculate ranking by using words statistics like basic tf-idf...
var score = $u.max($u.map(fileMap[file], function(w){return scoreMap[file][w]}));
- results.push([docnames[file], titles[file], '', null, score, filenames[file]]);
+ results.push([docnames[file], titles[file], '', null, score, filenames[file], rootUrl]);
}
}
return results;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment