(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; } })();