lucos_search_component 0.0.13 → 0.0.15

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (3) hide show
  1. package/dist/index.js +43 -3
  2. package/index.js +43 -3
  3. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -5683,6 +5683,22 @@ class LucosSearchComponent extends HTMLSpanElement {
5683
5683
  --lozenge-border: #674800;
5684
5684
  --lozenge-text: #352005;
5685
5685
  }
5686
+ .lozenge[data-type="Historical Event"] {
5687
+ --lozenge-background: #740909;
5688
+ --lozenge-border: #470202;
5689
+ }
5690
+ .lozenge[data-type="Number"] {
5691
+ --lozenge-background: #0000ff;
5692
+ --lozenge-border: #000083;
5693
+ }
5694
+ /** Temporal Types **/
5695
+ .lozenge[data-type="Calendar"], .lozenge[data-type="Festival"], .lozenge[data-type="Month of Year"], .lozenge[data-type="Day of Week"] {
5696
+ --lozenge-background: #fffc33;
5697
+ --lozenge-border: #7f7e00;
5698
+ --lozenge-text: #0f0f00;
5699
+ }
5700
+
5701
+
5686
5702
  .lozenge.active {
5687
5703
  --lozenge-border: #b00;
5688
5704
  }
@@ -5693,6 +5709,10 @@ class LucosSearchComponent extends HTMLSpanElement {
5693
5709
  .ts-dropdown {
5694
5710
  margin: 0;
5695
5711
  }
5712
+ .lozenge a {
5713
+ color: inherit;
5714
+ text-decoration: none;
5715
+ }
5696
5716
  `;
5697
5717
  shadow.appendChild(mainStyle);
5698
5718
 
@@ -5704,6 +5724,8 @@ class LucosSearchComponent extends HTMLSpanElement {
5704
5724
  valueField: 'id',
5705
5725
  labelField: 'pref_label',
5706
5726
  searchField: [],
5727
+ closeAfterSelect: true,
5728
+ highlight: false, // Will use typesense's hightlight (as it can consider other fields)
5707
5729
  load: async function(query, callback) {
5708
5730
  const queryParams = new URLSearchParams({
5709
5731
  q: query,
@@ -5744,12 +5766,27 @@ class LucosSearchComponent extends HTMLSpanElement {
5744
5766
  this.updateOption(result.id, result);
5745
5767
  });
5746
5768
  },
5769
+ onItemSelect: function (item) {
5770
+ // Tom-select prevents clicking on link in an item to work as normal, so force it here
5771
+ window.open(item.dataset.value, '_blank').focus();
5772
+ },
5747
5773
  render:{
5748
5774
  option: function(data, escape) {
5749
- return `<div>${escape(data.pref_label)}<span class="type lozenge" data-type="${escape(data.type)}">${escape(data.type)}</span></div>`;
5775
+ let label = escape(data.pref_label);
5776
+ let alt_label = "";
5777
+ if (data.highlight.pref_label) {
5778
+ label = data.highlight.pref_label.snippet;
5779
+ } else if (data.highlight.labels) {
5780
+ const matched_label = data.highlight.labels.find(l => l.matched_tokens.length > 0);
5781
+ if (matched_label) {
5782
+ alt_label = ` <span class="alt-label">(${matched_label.snippet})</span>`;
5783
+ }
5784
+ }
5785
+ label = label.replace(` (${data.type})`,""); // No need to include any type disambiguation in label, as types are always shown
5786
+ return `<div>${label}${alt_label}<span class="type lozenge" data-type="${escape(data.type)}">${escape(data.type)}</span></div>`;
5750
5787
  },
5751
5788
  item: function(data, escape) {
5752
- return `<div class="lozenge" data-type="${escape(data.type)}">${escape(data.pref_label)}</div>`;
5789
+ return `<div class="lozenge" data-type="${escape(data.type)}"><a href="${data.id}" target="_blank">${escape(data.pref_label)}</a></div>`;
5753
5790
  },
5754
5791
  },
5755
5792
  });
@@ -5764,7 +5801,10 @@ class LucosSearchComponent extends HTMLSpanElement {
5764
5801
  searchParams.set('query_by_weights', "10,8,3,1");
5765
5802
  searchParams.set('sort_by', "_text_match:desc,pref_label:asc");
5766
5803
  searchParams.set('prioritize_num_matching_fields', false);
5767
- searchParams.set('include_fields', "id,pref_label,type");
5804
+ searchParams.set('include_fields', "id,pref_label,type,labels");
5805
+ searchParams.set('enable_highlight_v1', false);
5806
+ searchParams.set('highlight_start_tag', '<span class="highlight">');
5807
+ searchParams.set('highlight_end_tag', '</span>');
5768
5808
  const response = await fetch("https://arachne.l42.eu/search?"+searchParams.toString(), {
5769
5809
  headers: { 'X-TYPESENSE-API-KEY': key },
5770
5810
  signal: AbortSignal.timeout(900),
package/index.js CHANGED
@@ -85,6 +85,22 @@ class LucosSearchComponent extends HTMLSpanElement {
85
85
  --lozenge-border: #674800;
86
86
  --lozenge-text: #352005;
87
87
  }
88
+ .lozenge[data-type="Historical Event"] {
89
+ --lozenge-background: #740909;
90
+ --lozenge-border: #470202;
91
+ }
92
+ .lozenge[data-type="Number"] {
93
+ --lozenge-background: #0000ff;
94
+ --lozenge-border: #000083;
95
+ }
96
+ /** Temporal Types **/
97
+ .lozenge[data-type="Calendar"], .lozenge[data-type="Festival"], .lozenge[data-type="Month of Year"], .lozenge[data-type="Day of Week"] {
98
+ --lozenge-background: #fffc33;
99
+ --lozenge-border: #7f7e00;
100
+ --lozenge-text: #0f0f00;
101
+ }
102
+
103
+
88
104
  .lozenge.active {
89
105
  --lozenge-border: #b00;
90
106
  }
@@ -95,6 +111,10 @@ class LucosSearchComponent extends HTMLSpanElement {
95
111
  .ts-dropdown {
96
112
  margin: 0;
97
113
  }
114
+ .lozenge a {
115
+ color: inherit;
116
+ text-decoration: none;
117
+ }
98
118
  `;
99
119
  shadow.appendChild(mainStyle);
100
120
 
@@ -106,6 +126,8 @@ class LucosSearchComponent extends HTMLSpanElement {
106
126
  valueField: 'id',
107
127
  labelField: 'pref_label',
108
128
  searchField: [],
129
+ closeAfterSelect: true,
130
+ highlight: false, // Will use typesense's hightlight (as it can consider other fields)
109
131
  load: async function(query, callback) {
110
132
  const queryParams = new URLSearchParams({
111
133
  q: query,
@@ -146,12 +168,27 @@ class LucosSearchComponent extends HTMLSpanElement {
146
168
  this.updateOption(result.id, result);
147
169
  });
148
170
  },
171
+ onItemSelect: function (item) {
172
+ // Tom-select prevents clicking on link in an item to work as normal, so force it here
173
+ window.open(item.dataset.value, '_blank').focus();
174
+ },
149
175
  render:{
150
176
  option: function(data, escape) {
151
- return `<div>${escape(data.pref_label)}<span class="type lozenge" data-type="${escape(data.type)}">${escape(data.type)}</span></div>`;
177
+ let label = escape(data.pref_label);
178
+ let alt_label = "";
179
+ if (data.highlight.pref_label) {
180
+ label = data.highlight.pref_label.snippet;
181
+ } else if (data.highlight.labels) {
182
+ const matched_label = data.highlight.labels.find(l => l.matched_tokens.length > 0);
183
+ if (matched_label) {
184
+ alt_label = ` <span class="alt-label">(${matched_label.snippet})</span>`;
185
+ }
186
+ }
187
+ label = label.replace(` (${data.type})`,""); // No need to include any type disambiguation in label, as types are always shown
188
+ return `<div>${label}${alt_label}<span class="type lozenge" data-type="${escape(data.type)}">${escape(data.type)}</span></div>`;
152
189
  },
153
190
  item: function(data, escape) {
154
- return `<div class="lozenge" data-type="${escape(data.type)}">${escape(data.pref_label)}</div>`;
191
+ return `<div class="lozenge" data-type="${escape(data.type)}"><a href="${data.id}" target="_blank">${escape(data.pref_label)}</a></div>`;
155
192
  },
156
193
  },
157
194
  });
@@ -166,7 +203,10 @@ class LucosSearchComponent extends HTMLSpanElement {
166
203
  searchParams.set('query_by_weights', "10,8,3,1");
167
204
  searchParams.set('sort_by', "_text_match:desc,pref_label:asc");
168
205
  searchParams.set('prioritize_num_matching_fields', false);
169
- searchParams.set('include_fields', "id,pref_label,type");
206
+ searchParams.set('include_fields', "id,pref_label,type,labels");
207
+ searchParams.set('enable_highlight_v1', false);
208
+ searchParams.set('highlight_start_tag', '<span class="highlight">')
209
+ searchParams.set('highlight_end_tag', '</span>');
170
210
  const response = await fetch("https://arachne.l42.eu/search?"+searchParams.toString(), {
171
211
  headers: { 'X-TYPESENSE-API-KEY': key },
172
212
  signal: AbortSignal.timeout(900),
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lucos_search_component",
3
- "version": "0.0.13",
3
+ "version": "0.0.15",
4
4
  "description": "Web Component for searching lucOS data",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",