[Doc] Update template with docfx v2.37.2
[platform/core/csapi/tizenfx.git] / docs / template / tizen / styles / search-worker.js
1 (function () {
2   importScripts('lunr.min.js');
3
4   var lunrIndex;
5
6   var stopWords = null;
7   var searchData = {};
8
9   lunr.tokenizer.seperator = /[\s\-\.]+/;
10
11   var stopWordsRequest = new XMLHttpRequest();
12   stopWordsRequest.open('GET', '../search-stopwords.json');
13   stopWordsRequest.onload = function () {
14     if (this.status != 200) {
15       return;
16     }
17     stopWords = JSON.parse(this.responseText);
18     buildIndex();
19   }
20   stopWordsRequest.send();
21
22   var searchDataRequest = new XMLHttpRequest();
23
24   searchDataRequest.open('GET', '../index.json');
25   searchDataRequest.onload = function () {
26     if (this.status != 200) {
27       return;
28     }
29     searchData = JSON.parse(this.responseText);
30
31     buildIndex();
32
33     postMessage({ e: 'index-ready' });
34   }
35   searchDataRequest.send();
36
37   onmessage = function (oEvent) {
38     var q = oEvent.data.q;
39     var hits = lunrIndex.search(q);
40     var results = [];
41     hits.forEach(function (hit) {
42       var item = searchData[hit.ref];
43       results.push({ 'href': item.href, 'title': item.title, 'keywords': item.keywords });
44     });
45     postMessage({ e: 'query-ready', q: q, d: results });
46   }
47
48   function buildIndex() {
49     if (stopWords !== null && !isEmpty(searchData)) {
50       lunrIndex = lunr(function () {
51         this.pipeline.remove(lunr.stopWordFilter);
52         this.ref('href');
53         this.field('title', { boost: 50 });
54         this.field('keywords', { boost: 20 });
55
56         for (var prop in searchData) {
57           if (searchData.hasOwnProperty(prop)) {
58             this.add(searchData[prop]);
59           }
60         }
61
62         var docfxStopWordFilter = lunr.generateStopWordFilter(stopWords);
63         lunr.Pipeline.registerFunction(docfxStopWordFilter, 'docfxStopWordFilter');
64         this.pipeline.add(docfxStopWordFilter);
65         this.searchPipeline.add(docfxStopWordFilter);
66       });
67     }
68   }
69
70   function isEmpty(obj) {
71     if(!obj) return true;
72
73     for (var prop in obj) {
74       if (obj.hasOwnProperty(prop))
75         return false;
76     }
77
78     return true;
79   }
80 })();