File size: 33,973 Bytes
7d6537e
 
2b8db60
7d6537e
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294

<!DOCTYPE html>
<html>
  <head>
    <meta http-equiv="content-type" content="text/html; charset=UTF-8" />
    <title>fdaudens/hf-blog-posts</title>
    
    <link rel="preconnect" href="https://fonts.googleapis.com">
    <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
    <link href="https://fonts.googleapis.com/css2?family=Roboto&display=swap" rel="stylesheet">
    
    
       
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap-theme.min.css" />
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.6.3/css/font-awesome.min.css" />
    <script src="https://unpkg.com/deck.gl@latest/dist.min.js"></script>
    
    <script src="https://unpkg.com/[email protected]"></script>
    
    <style>
        body {
          margin: 0;
          padding: 0;
          overflow: hidden;
          background: #ffffff;
        }

        #deck-container {
          width: 100vw;
          height: 100vh;
        }

        #deck-container canvas {
          z-index: 1;
          background: #ffffff;
        }

        .deck-tooltip {
            
            font-size: 0.8em;
            font-family: Roboto;
            font-weight: 300;
            color: #000000 !important;
            background-color: #ffffffaa !important;
            border-radius: 12px;
            box-shadow: 2px 3px 10px #aaaaaa44;
            max-width: 25%;
        }
        
        #loading {
            width: 100%;
            height: 100%;
            top: 0px;
            left: 0px;
            position: absolute;
            display: block; 
            z-index: 99
        }

        #loading-image {
            position: absolute;
            top: 45%;
            left: 47.5%;
            z-index: 100
        }
        
        #title-container {
            position: absolute;
            top: 0;
            left: 0;
            margin: 16px;
            padding: 12px;
            border-radius: 16px;
            line-height: 0.95;
            z-index: 2;
            font-family: Roboto;
            color: #000000;
            background: #ffffffaa;
            box-shadow: 2px 3px 10px #aaaaaa44;
        }
        
        
        #search-container{
            position: absolute;
            left: -16px;
            margin: 16px;
            padding: 12px;
            border-radius: 16px;
            z-index: 2;
            font-family: Roboto;
            color: #000000;
            background: #ffffffaa;
            width: fit-content;
            box-shadow: 2px 3px 10px #aaaaaa44;
        }
        input {
            margin: 2px;
            padding: 4px;
            border-radius: 8px;
            color: #000000;
            background: #ffffffdd;
            border: 1px solid #ddddddff;
            transition: 0.5s;
            outline: none;
        }
        input:focus {
          border: 2px solid #555;
        }
        
        
    </style>
  </head>
  <body>
    <div id="loading">
        <img id="loading-image" src="https://i.gifer.com/ZKZg.gif" alt="Loading..." width="5%"/>
    </div>
    
    <div id="title-container">
        <span style="font-family:Roboto;font-size:36pt;color:#000000">
            fdaudens/hf-blog-posts
        </span><br/>
        <span style="font-family:Roboto;font-size:18pt;color:#777777">
            Data map for the entire <a href='https://huggingface.co/datasets/fdaudens/hf-blog-posts/viewer/default/train' target='_blank'>dataset</a> (381 rows) using the column 'Headline'
        </span>
        
        <div id="search-container">
            <input autocomplete="off" type="search" id="search" placeholder="🔍">
        </div>
        
    </div>
    
    
    <div id="deck-container">
    </div>
    
  </body>
  <script type="module">
    import { ArrowLoader } from 'https://cdn.jsdelivr.net/npm/@loaders.gl/[email protected]/+esm'
    import { JSONLoader } from 'https://cdn.jsdelivr.net/npm/@loaders.gl/[email protected]/+esm'
    

    
    const pointDataBase64 = "QVJST1cxAAD/////0AUAABAAAAAAAAoADgAGAAUACAAKAAAAAAEEABAAAAAAAAoADAAAAAQACAAKAAAASAQAAAQAAAABAAAADAAAAAgADAAEAAgACAAAACAEAAAEAAAAEAQAAHsiaW5kZXhfY29sdW1ucyI6IFt7ImtpbmQiOiAicmFuZ2UiLCAibmFtZSI6IG51bGwsICJzdGFydCI6IDAsICJzdG9wIjogMzgxLCAic3RlcCI6IDF9XSwgImNvbHVtbl9pbmRleGVzIjogW3sibmFtZSI6IG51bGwsICJmaWVsZF9uYW1lIjogbnVsbCwgInBhbmRhc190eXBlIjogInVuaWNvZGUiLCAibnVtcHlfdHlwZSI6ICJvYmplY3QiLCAibWV0YWRhdGEiOiB7ImVuY29kaW5nIjogIlVURi04In19XSwgImNvbHVtbnMiOiBbeyJuYW1lIjogIngiLCAiZmllbGRfbmFtZSI6ICJ4IiwgInBhbmRhc190eXBlIjogImZsb2F0MzIiLCAibnVtcHlfdHlwZSI6ICJmbG9hdDMyIiwgIm1ldGFkYXRhIjogbnVsbH0sIHsibmFtZSI6ICJ5IiwgImZpZWxkX25hbWUiOiAieSIsICJwYW5kYXNfdHlwZSI6ICJmbG9hdDMyIiwgIm51bXB5X3R5cGUiOiAiZmxvYXQzMiIsICJtZXRhZGF0YSI6IG51bGx9LCB7Im5hbWUiOiAiciIsICJmaWVsZF9uYW1lIjogInIiLCAicGFuZGFzX3R5cGUiOiAidWludDgiLCAibnVtcHlfdHlwZSI6ICJ1aW50OCIsICJtZXRhZGF0YSI6IG51bGx9LCB7Im5hbWUiOiAiZyIsICJmaWVsZF9uYW1lIjogImciLCAicGFuZGFzX3R5cGUiOiAidWludDgiLCAibnVtcHlfdHlwZSI6ICJ1aW50OCIsICJtZXRhZGF0YSI6IG51bGx9LCB7Im5hbWUiOiAiYiIsICJmaWVsZF9uYW1lIjogImIiLCAicGFuZGFzX3R5cGUiOiAidWludDgiLCAibnVtcHlfdHlwZSI6ICJ1aW50OCIsICJtZXRhZGF0YSI6IG51bGx9LCB7Im5hbWUiOiAiYSIsICJmaWVsZF9uYW1lIjogImEiLCAicGFuZGFzX3R5cGUiOiAidWludDgi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yVnJyZ/Jn5+ampiayZpZmL/JmL+/yclZmIKayZiYv8mav5i/mpi/n5jJyb+av5hlycmYn7/Jv7+/mJjJmJjJycmYgslZmIK/yWXJyb+/gsmTv8nJyZq/mMm/mpiamL+Tv5iaycmCWb9ZgslZyYLJmMmYmsm/mJpZk4KYycnJmJiYmMlZmJiYgr+YycmCyVnJk5q/mr+YgpqYmFmYyVmYv5jJgpiCmGXJyWWCyZiagpjJmJ+aWVnJmphZgsmYWcmYmFllWcman2XJn2WYyYLJglmCn5hlmMmaWYKan5qfyZiCyZqCmmWfycmfmoKTWZiCmMmYmMmYyZplZclZycmYZWXJmprJZcmfmMmYmGWCZZjJZWVlyWVlmMllycllmMmfmGWTmGWYZZjJmGVZyZiampqayZqYmMmamGWYmslZmMmfmp/JmpplmpjJmJiTmpiYmGWYyZ+ayZiTmphlmJiYn5PJmpqaAAAAzs7msM7O4c6wr87m5iEhsM7m5jvm5iHmsK+wsDuwOzshIeYhsCGv5s6w5s7OsLCv5pwhsObmzrAhzubOIebOO+awsM4hzuY2sLDmO86wzs7O5uaw5uawsLDmnLCv5pzOsDawsM7OnLDhzrCwsCHO5rDOIeYh5s7hzuYhsLCcr86vnLCvsJyw5rDmIbDO5iGv4ZzmsLCw5ubm5rCv5ubmnM7msLCcsK+w4SHOIc7mnCHm5q/msK/mzuawnOac5jawsDacsOYhnOaw5jshr6+wIeavnLDmr7Dm5q82r7AhOzawOzbmsJywnK+cO+Y25rAhr5whOyE7sOacsCGcITY7sLA7IZzhr+ac5rDm5rDmsCE2NrCvsLDmNjawISGwNrA75rDm5jacNuawNjY2sDY25rA2sLA25rA75jbh5jbmNuaw5javsOYhISEhsCHm5rAh5jbmIbCv5rA7ITuwISE2Ieaw5ubhIebm5jbmsDshsObhIeY25ubmO+GwISEhAAAAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0AAAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAAA/////wAAAAAQAAAADAAUAAYACAAMABAADAAAAAAABAA8AAAAKAAAAAQAAAABAAAA4AUAAAAAAACwAQAAAAAAAHATAAAAAAAAAAAAAAAAAAAAAAoADAAAAAQACAAKAAAASAQAAAQAAAABAAAADAAAAAgADAAEAAgACAAAACAEAAAEAAAAEAQAAHsiaW5kZXhfY29sdW1ucyI6IFt7ImtpbmQiOiAicmFuZ2UiLCAibmFtZSI6IG51bGwsICJzdGFydCI6IDAsICJzdG9wIjogMzgxLCAic3RlcCI6IDF9XSwgImNvbHVtbl9pbmRleGVzIjogW3sibmFtZSI6IG51bGwsICJmaWVsZF9uYW1lIjogbnVsbCwgInBhbmRhc190eXBlIjogInVuaWNvZGUiLCAibnVtcHlfdHlwZSI6ICJvYmplY3QiLCAibWV0YWRhdGEiOiB7ImVuY29kaW5nIjogIlVURi04In19XSwgImNvbHVtbnMiOiBbeyJuYW1lIjogIngiLCAiZmllbGRfbmFtZSI6ICJ4IiwgInBhbmRhc190eXBlIjogImZsb2F0MzIiLCAibnVtcHlfdHlwZSI6ICJmbG9hdDMyIiwgIm1ldGFkYXRhIjogbnVsbH0sIHsibmFtZSI6ICJ5IiwgImZpZWxkX25hbWUiOiAieSIsICJwYW5kYXNfdHlwZSI6ICJmbG9hdDMyIiwgIm51bXB5X3R5cGUiOiAiZmxvYXQzMiIsICJtZXRhZGF0YSI6IG51bGx9LCB7Im5hbWUiOiAiciIsICJmaWVsZF9uYW1lIjogInIiLCAicGFuZGFzX3R5cGUiOiAidWludDgiLCAibnVtcHlfdHlwZSI6ICJ1aW50OCIsICJtZXRhZGF0YSI6IG51bGx9LCB7Im5hbWUiOiAiZyIsICJmaWVsZF9uYW1lIjogImciLCAicGFuZGFzX3R5cGUiOiAidWludDgiLCAibnVtcHlfdHlwZSI6ICJ1aW50OCIsICJtZXRhZGF0YSI6IG51bGx9LCB7Im5hbWUiOiAiYiIsICJmaWVsZF9uYW1lIjogImIiLCAicGFuZGFzX3R5cGUiOiAidWludDgiLCAibnVtcHlfdHlwZSI6ICJ1aW50OCIsICJtZXRhZGF0YSI6IG51bGx9LCB7Im5hbWUiOiAiYSIsICJmaWVsZF9uYW1lIjogImEiLCAicGFuZGFzX3R5cGUiOiAidWludDgiLCAibnVtcHlfdHlwZSI6ICJ1aW50OCIsICJtZXRhZGF0YSI6IG51bGx9LCB7Im5hbWUiOiAic2VsZWN0ZWQiLCAiZmllbGRfbmFtZSI6ICJzZWxlY3RlZCIsICJwYW5kYXNfdHlwZSI6ICJ1aW50OCIsICJudW1weV90eXBlIjogInVpbnQ4IiwgIm1ldGFkYXRhIjogbnVsbH1dLCAiY3JlYXRvciI6IHsibGlicmFyeSI6ICJweWFycm93IiwgInZlcnNpb24iOiAiMTcuMC4wIn0sICJwYW5kYXNfdmVyc2lvbiI6ICIyLjIuMiJ9AAAAAAYAAABwYW5kYXMAAAcAAAAoAQAA7AAAALwAAACQAAAAZAAAADgAAAAEAAAABP///wAAAQIQAAAAHAAAAAQAAAAAAAAACAAAAHNlbGVjdGVkAAAAAGL///8IAAAANP///wAAAQIQAAAAFAAAAAQAAAAAAAAAAQAAAGEAAACK////CAAAAFz///8AAAECEAAAABQAAAAEAAAAAAAAAAEAAABiAAAAsv///wgAAACE////AAABAhAAAAAUAAAABAAAAAAAAAABAAAAZwAAANr///8IAAAArP///wAAAQIQAAAAGAAAAAQAAAAAAAAAAQAAAHIABgAIAAQABgAAAAgAAADY////AAABAxAAAAAUAAAABAAAAAAAAAABAAAAeQAAAMr///8AAAEAEAAUAAgABgAHAAwAAAAQABAAAAAAAAEDEAAAABgAAAAEAAAAAAAAAAEAAAB4AAYACAAGAAYAAAAAAAEA+AUAAEFSUk9XMQ==";
    const pointDataBuffer = fflate.strToU8(atob(pointDataBase64), true);
    const pointData = await loaders.parse(pointDataBuffer, ArrowLoader);
    const hoverDataBase64 = "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";
    const hoverDataBuffer = fflate.strToU8(atob(hoverDataBase64), true);
    const unzippedHoverData = fflate.gunzipSync(hoverDataBuffer);
    const hoverData = await loaders.parse(unzippedHoverData, ArrowLoader);
    const labelDataBase64 = "H4sIALfzIGcC/32UW2+bQBCF/wraZxvNzN55q5RGrRS3VeW30oeNvSVIsLhgp22q/vcOEN8SKTzBSnC+c+YM3/6K36JYYi61VQ6ck2Yh/ohC5kY5QgQguRBNuI+NKMS7j8sqptiHfdxm8qZMVWhjto2Psel2bUx7sRBD/RRFQZgrMB68QeQv9qJAxIWoRKFhIe5F4fk0iMKof4sJgQkAASVJlBOByslKR+CsxTPBh0NV1anKbsMmlqnttrEZspC2ZVrHNHT9bdP9OkO4HGZtcJO2U5M2SrwWZ/8kQYIjr2Z1yo2RhkYHF/7v7lbZ+8fQHMK+7lKZWDhbx9CWaRVSqOJ1BJRbabR1Cmmm0DPFaH2kwBcRLIGnYDQBOKMnCsw9edTakTEXFCFVB1bLVpP9s6DNrUZlweFJ0U+KCHqStPJl6N4yhiRLfhJkBOK3NcjpE0fFVdg81ClmdzH0ieMv0+fdvm7rp+cc1nHzkOqfhzi8UQA9oYzDZBL30jvxuNHxG1rLo3dNaLXy7i2Qr13YtmF3mbokduS9lsfi2bl4c+wSXqXurQfp0LpTCFJpg45PL2JfHRr23G1DU6ZPYX/oQ5MdR1GmL323icPATGcUlWu+UJG1M8rYv7GG8zRIXZOwLEpvFWiyEwiTSeN5LQHVmeM5et7Amxh3ZTpnse5Dna4IIOdRei+RrJoI1LyEzs1ZvOqDAU4d0Bt/HAJYHox3l3VgnTT86Po29ssy3Ych8v7xc9yEYT9uJ9+XiX8L9eaiEXjcxnHFRoa5CUgniO//Ac3DWNWOBAAA";
    const labelDataBuffer = fflate.strToU8(atob(labelDataBase64), true);
    const unzippedLabelData = fflate.gunzipSync(labelDataBuffer);    
    const labelData = await loaders.parse(unzippedLabelData, JSONLoader);
    
    
    const DATA = {src: pointData.data, length: pointData.data.x.length}

    const container = document.getElementById('deck-container');
    const pointLayer = new deck.ScatterplotLayer({
        id: 'dataPointLayer',
        data: DATA,
        getPosition: (object, {index, data}) => {
            return [data.src.x[index], data.src.y[index]];
        },
        
        getRadius: 0.1,
        
        getFillColor: (object, {index, data}) => {
            return [
                data.src.r[index], 
                data.src.g[index], 
                data.src.b[index],
                180
            ]
        },
        getLineColor: (object, {index, data}) => {
            return [
                data.src.r[index], 
                data.src.g[index], 
                data.src.b[index],
                32
            ]
        },       
        getLineColor: [250, 250, 250, 128],
        getLineWidth: 0.001,
        highlightColor: [170, 0, 0, 187], 
        lineWidthMaxPixels: 8,
        lineWidthMinPixels: 0.1,
        radiusMaxPixels: 24, 
        radiusMinPixels: 0.01,
        radiusUnits: "common", 
        lineWidthUnits: "common", 
        autoHighlight: true,
        pickable: true, 
        stroked: true
    });
    const labelLayer = new deck.TextLayer({
        id: "textLabelLayer",
        data: labelData,
        pickable: false,
        getPosition: d => [d.x, d.y],
        getText: d => d.label,
        getColor: d => [d.r, d.g, d.b],
        getSize: d => d.size,
        sizeScale: 1,
        sizeMinPixels: 18,
        sizeMaxPixels: 36,
        outlineWidth: 8,
        outlineColor: [238, 238, 238, 221],
        getBackgroundColor: [255, 255, 255, 64],
        getBackgroundPadding: [15, 15, 15, 15],
        background: true,
        characterSet: "auto",
        fontFamily: "Roboto",
        fontWeight: 900,
        lineHeight: 0.95,
        fontSettings: {"sdf": true},
        getTextAnchor: "middle",
        getAlignmentBaseline: "center",
        lineHeight: 0.95,
        elevation: 100,
        // CollideExtension options
        collisionEnabled: true,
        getCollisionPriority: d => d.size,
        collisionTestProps: {
          sizeScale: 3,
          sizeMaxPixels: 36 * 2,
          sizeMinPixels: 18 * 2
        },
        extensions: [new deck.CollisionFilterExtension()],
    });
    

    const deckgl = new deck.DeckGL({
      container: container,
      initialViewState: {
        latitude: 2.1977801,
        longitude: -0.084878646,
        zoom: 6.143425800644859
      },
      controller: true,
      
      layers: [pointLayer, labelLayer],
      
      
      getTooltip: ({index}) => hoverData.data.hover_text[index]
    });
    
    document.getElementById("loading").style.display = "none";
        
    
        function selectPoints(item, conditional) {
        var layerId;
        if (item) {
            for (var i = 0; i < DATA.length; i++) {
                if (conditional(i)) {
                    DATA.src.selected[i] = 1;
                } else {
                    DATA.src.selected[i] = 0;
                }
            }
            layerId = 'selectedPointLayer' + item;
        } else {
            for (var i = 0; i < DATA.length; i++) {
                DATA.src.selected[i] = 1;
            }
            layerId = 'dataPointLayer';
        }
        const selectedPointLayer = pointLayer.clone(
            {
                id: layerId,
                data: DATA,
                getFilterValue: (object, {index, data}) => data.src.selected[index],
                filterRange: [1, 2],
                extensions: [new deck.DataFilterExtension({filterSize: 1})]
            }
        );
        deckgl.setProps(
            {layers: 
                [selectedPointLayer].concat(deckgl.props.layers.slice(1,))
            }
        );
    }
    
    const search = document.getElementById("search");
    search.addEventListener("input", (event) => {
            const search_term = event.target.value.toLowerCase();
            selectPoints(search_term, (i) => hoverData.data.hover_text[i].toLowerCase().includes(search_term));
        }
    );
    
    
    </script>
</html>