File size: 34,049 Bytes
7d6537e
 
2b8db60
7d6537e
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
6007cd8
7d6537e
 
6007cd8
7d6537e
 
 
6007cd8
7d6537e
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
6007cd8
 
 
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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32Df37nf39+f347f359gjqnfjqmp399gjoyfYI6Oqd+f346pn46puY7fn6mfqY6Z39+Ouanfqamp347fjo7f39+OjN9gjoyp35nf36mpjN+GqYzf35+pjt+p346fjqmG346f39+MYKlgjI5g34yGjt+On9+pjp9ghoyO39/fjo6Ojp9gjo6OjKmO39+M32Dfhp+pn6mOjJ+OjmCO32COqY6fjI6Mjt/f35mM346fjI6fjrmfYGDfn45gjN+OYJ+OjmCZYN/fuZnfuZmO34zfjGCMuY6Zjt+fYIyfuZ+5346M35+Mn5m539+5n4yGYI6Mjt+Ojt+O35/fmd9g39+Omd/fn5/f39/fjt+OjpmMmY7f35mZ35mZjt+Z37nfjpm5jpmGjpmOmY7fjpnf347fn5+f35+Ojt+fjpmOn99gjt+5n9/fn5+Zn47fjo6Gn46OjpmO37mf346Gn46Zjo6OuYaGn5+fAAAA4+OsUePjguNR6uOsrFFRzeOsrGqsrM2szerNzWrNzc1RzazNzVHqrOPNrOPjzc3qrChR6qys481RzazjUazjaqzNUeNR46zPzc2sauPN4+PjzazNrKzNzc2sKM3qrCjjzc/NzePjKM2C4yjNzVHjrM3jzaxRrOOCzaxRzc0o6uPqKKzqzSiCrM2sUc3jrFHqgiiszc3NrKysrFHqrKysKOOszc0ozerNglHjUeOsKFGsrOqszeqs46xRKKworM3Nzc8ozaxRKKxRrGpR6urNUazqKM2s6lGsrOrP6s3Nas/Nas+szSjNKOooaqzPrM1R6ihRalFqzawozVEoUc9qzc1qUSiC6qworM2srM2szVHNz83qzc2sz83NUVHNzc3NrM2srM8oz6zNzc/Pzc/PrM3PzWrNrM9qrM+CrM+sz6zNrM/NzazNUVFRzVGsrM1RrM+sUc3qrM1qUc3NUVHPUazNrKyCUaysrM+szWpRzayCUazPrKysaoKCUVFRAAAAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0AAAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAAA/////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 = "H4sIAEr8IGcC/5XUy27aQBQG4FexZg3WnDlzZdcqiRoJ0qrKru5iAlNnVDOmtkmTVH33Hl+4JKy6AgzYn//zH3/7w57ZYg655VJqVFyZGXthC8i10BK0tihmrPIPoWIL9uF2XoYUGt+FTYZXRSr9NmSb8BSqercNqWMz1sbXwBaC5w6VMMaBoRM0bKFhxkq2UPTyQOdHOWOejsq/s5HA8/7nxkk9AZQyILXj2p0BdrvqJaYyu37ehaYr0m1qY/nYtVlXF+ku7BtfZXeh+103P9sixZTdxOTTOpxgkAM3lqMCowaYwAFm5QgD8Q5G2WhQqIw1I42ogmuFUpH2ZPt4/fV+/uDbsCGJ7wbK0qdy78tQpC9NvQ5tS/YirepNqNoTyeZ8kPRJlX02aqLAO4rMjeaKA4GOFKCcnZUo8UT5tC/LPqUbvw6ZTwSKFFETqn5wRerC+jHVVV3GcKYwuTUCke7SuIEDqAePMQPH6XcakUtrlFXItZhmBpw4Vsj+LwfMcrnKrp98tfddrFNB49hk98FvKQefKJu3vRE5l85xQAtyVAg1KNyhOPpiPsR2DrAfRp8J5gI5ERARToyVXz/GFLJl8E0axvB518VtfJ1Y930o8df+PJKLrgB3YyRuwCB/a6FiIGiqse5L9TLgUDrFDXd4VpXVvupiFftuVP9bFpkTR1oKGcxoGqdk7UCS6iIeWiSN2plpSnREGCmcpIxPpCmMvjVXIeyKdMgpGwFF+lE3VKi2Cw2F1fjYf3lkgctRKCdRHNsD414BHxdLXtbHOqSqaHryHGDGKorbgTwbHF0rtXTxbWjmRZoWjD6HNWF6IL0vEj2E4vpsdnBYKsDRYUaGOe7U93/n0Fns/AQAAA==";
    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: -0.30952063,
        longitude: -2.271556,
        zoom: 6.0808719180459825
      },
      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>