mirror of https://github.com/onweru/compose.git

weru
05.12.2020 e92f6ced66fb25a6730264a7515f76099c540679
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
const idx = lunr(function () {
  this.field('id')
  this.field('link')
  this.field('title')
  this.field('body')
 
  {{ range $index, $page := .Site.Pages }}
  this.add({
    "id": "{{ $index }}",
    "link": "{{ .Permalink }}",
    "title": "{{ .Title }}",
    "body": "{{ .PlainWords }}".toLowerCase(),
  });
  {{ end }}
});
 
const simpleIndex = [
  {{ range $index, $page := .Site.Pages }}
   {
     id: {{ $index }},
     link: "{{ .Permalink }}",
     title: "{{ .Title }}",
   },
  {{ end }}
];
 
function searchResults(results=[], order =[],query="") {
  let resultsFragment = new DocumentFragment();
  let showResults = elem('.search_results');
  emptyEl(showResults);
  let index = 0
  if(results.length) {
    let resultsTitle = createEl('h3');
    resultsTitle.className = 'search_title';
    resultsTitle.innerText = 'Quick Links';
    resultsFragment.appendChild(resultsTitle);
    results.slice(0,6).forEach(function(result){
      let item = createEl('a');
      item.href = `${result.link}?query=${query}`;
      item.className = 'search_result';
      item.textContent = result.title;
      item.style.order = order[index];
      resultsFragment.appendChild(item);
      index += 1
    });
  } else {
    showResults.innerHTML = "";
  }
  showResults.appendChild(resultsFragment);
}
 
function search(){
  const searchField = elem('.search_field');
 
  if (searchField) {
    searchField.addEventListener('input', function(event) {
      const searchTerm = this.value.trim().replaceAll(" ", " +").toLowerCase();
      if(searchTerm.length >= 3) {
        let rawResults = idx.search(`+${searchTerm}`);
 
        console.log(rawResults, searchTerm);
 
        if(rawResults.length) {
 
          let refs = rawResults.map(function(ref){
            // return id and score in a single string
            return `${ref.ref}:${ref.score}`;
          });
 
          let ids = refs.map(function(id){
            let positionOfSeparator = id.indexOf(":");
            id = id.substring(0,positionOfSeparator)
            return Number(id);
          });
 
          let scores = refs.map(function(score){
            let positionOfSeparator = score.indexOf(":");
            score = score.substring((positionOfSeparator + 1), (score.length - 1));
            return (parseFloat(score) * 50).toFixed(0);
          });
 
          console.log(scores, 'scores is');
 
          let matchedDocuments = simpleIndex.filter(function(doc){
            return ids.includes(doc.id);
          });
 
          console.log('matches are', matchedDocuments);
 
          matchedDocuments.length >= 1 ? searchResults(matchedDocuments, scores,searchTerm) : false;
        } else {
          searchResults();
        }
 
      } else {
        searchResults();
      }
    });
  }
}
 
let alltext = doc.innerHTML;
console.log(typeof alltext);
// doc.innerHTML = alltext.replaceAll('is', '<span class="is">is</span>');
 
 
window.addEventListener('load', () => search());