|
|
- (function () {
- importScripts('lunr.min.js');
-
- var lunrIndex;
-
- var stopWords = null;
- var searchData = {};
-
- lunr.tokenizer.separator = /[\s\-\.]+/;
-
- var stopWordsRequest = new XMLHttpRequest();
- stopWordsRequest.open('GET', '../search-stopwords.json');
- stopWordsRequest.onload = function () {
- if (this.status != 200) {
- return;
- }
- stopWords = JSON.parse(this.responseText);
- buildIndex();
- }
- stopWordsRequest.send();
-
- var searchDataRequest = new XMLHttpRequest();
-
- searchDataRequest.open('GET', '../index.json');
- searchDataRequest.onload = function () {
- if (this.status != 200) {
- return;
- }
- searchData = JSON.parse(this.responseText);
-
- buildIndex();
-
- postMessage({ e: 'index-ready' });
- }
- searchDataRequest.send();
-
- onmessage = function (oEvent) {
- var q = oEvent.data.q;
- var hits = lunrIndex.search(q);
- var results = [];
- hits.forEach(function (hit) {
- var item = searchData[hit.ref];
- results.push({ 'href': item.href, 'title': item.title, 'keywords': item.keywords });
- });
- postMessage({ e: 'query-ready', q: q, d: results });
- }
-
- function buildIndex() {
- if (stopWords !== null && !isEmpty(searchData)) {
- lunrIndex = lunr(function () {
- this.pipeline.remove(lunr.stopWordFilter);
- this.ref('href');
- this.field('title', { boost: 50 });
- this.field('keywords', { boost: 20 });
-
- for (var prop in searchData) {
- if (searchData.hasOwnProperty(prop)) {
- this.add(searchData[prop]);
- }
- }
-
- var docfxStopWordFilter = lunr.generateStopWordFilter(stopWords);
- lunr.Pipeline.registerFunction(docfxStopWordFilter, 'docfxStopWordFilter');
- this.pipeline.add(docfxStopWordFilter);
- this.searchPipeline.add(docfxStopWordFilter);
- });
- }
- }
-
- function isEmpty(obj) {
- if(!obj) return true;
-
- for (var prop in obj) {
- if (obj.hasOwnProperty(prop))
- return false;
- }
-
- return true;
- }
- })();
|