davanstrien HF staff commited on
Commit
59846b5
·
1 Parent(s): 4edfecf

Refactor dataset input and add trending dataset suggestions

Browse files
Files changed (1) hide show
  1. index.html +122 -21
index.html CHANGED
@@ -112,27 +112,25 @@
112
  class="card bg-white p-8 rounded-xl shadow-sm border border-gray-100"
113
  >
114
  <p class="text-gray-600 mb-4">
115
- Enter a dataset ID to find similar datasets. You can also click
116
- "Find Similar" on any search result to quickly find related
117
- datasets.
118
  </p>
119
  <div class="flex gap-3">
120
- <input
121
- type="text"
122
- id="datasetInput"
123
- placeholder="Enter dataset ID..."
124
- class="w-full p-3 border rounded-lg focus:ring-2 focus:ring-blue-100 focus:border-blue-300 transition-all outline-none"
125
- />
126
- <button
127
- onclick="findSimilarDatasets()"
128
- class="px-6 py-3 bg-blue-500 hover:bg-blue-600 text-white rounded-lg transition-colors flex items-center gap-2"
129
- >
130
- <i data-lucide="search"></i>
131
- Search
132
- </button>
133
- <div id="similarLoader" class="hidden">
134
- <i data-lucide="loader-2" class="animate-spin"></i>
135
  </div>
 
 
 
136
  </div>
137
  </div>
138
  </div>
@@ -322,12 +320,80 @@
322
  }
323
  }, DEBOUNCE_MS);
324
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
325
  // Find similar datasets
326
  async function findSimilarDatasets(page = 1) {
327
  const datasetId = document.getElementById("datasetInput").value;
328
  if (!datasetId) return;
329
 
330
- document.getElementById("similarLoader").classList.remove("hidden");
 
 
 
331
  document.getElementById("errorMessage").classList.add("hidden");
332
 
333
  try {
@@ -343,7 +409,9 @@
343
  } catch (error) {
344
  showError("Failed to find similar datasets. Please try again.");
345
  } finally {
346
- document.getElementById("similarLoader").classList.add("hidden");
 
 
347
  }
348
  }
349
 
@@ -372,7 +440,7 @@
372
  </button>`
373
  : results.length >= MAX_RESULTS
374
  ? `<div class="text-center mt-4 p-6 bg-blue-50 rounded-lg">
375
- <p class="text-gray-700 mb-3">🎉 You've reached the end of our dataset journey! (${MAX_RESULTS} results)</p>
376
  <p class="text-gray-600 mb-4">Can't find what you're looking for? Why not create and share your own dataset?</p>
377
  <a href="https://huggingface.co/docs/datasets/upload_dataset"
378
  target="_blank"
@@ -458,6 +526,39 @@
458
  ? "rotate(0deg)"
459
  : "rotate(90deg)";
460
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
461
  </script>
462
  </body>
463
  </html>
 
112
  class="card bg-white p-8 rounded-xl shadow-sm border border-gray-100"
113
  >
114
  <p class="text-gray-600 mb-4">
115
+ Enter a dataset ID to find similar datasets. Popular datasets will
116
+ appear as you type.
 
117
  </p>
118
  <div class="flex gap-3">
119
+ <div class="relative w-full">
120
+ <input
121
+ type="text"
122
+ id="datasetInput"
123
+ class="w-full p-3 border border-gray-200 rounded-lg"
124
+ placeholder="e.g. openai/gsm8k"
125
+ />
126
+ <div
127
+ id="suggestionsBox"
128
+ class="hidden absolute w-full mt-1 bg-white border border-gray-200 rounded-lg shadow-lg z-10 max-h-60 overflow-y-auto"
129
+ ></div>
 
 
 
 
130
  </div>
131
+ <button onclick="findSimilarDatasets()" class="btn-primary">
132
+ Find Similar
133
+ </button>
134
  </div>
135
  </div>
136
  </div>
 
320
  }
321
  }, DEBOUNCE_MS);
322
 
323
+ // Cache for trending datasets
324
+ let trendingDatasetsCache = null;
325
+ let cacheTimestamp = null;
326
+ const CACHE_DURATION = 1000 * 60 * 15; // 15 minutes
327
+
328
+ async function fetchTrendingDatasets() {
329
+ if (
330
+ trendingDatasetsCache &&
331
+ cacheTimestamp &&
332
+ Date.now() - cacheTimestamp < CACHE_DURATION
333
+ ) {
334
+ return trendingDatasetsCache;
335
+ }
336
+
337
+ try {
338
+ const response = await fetch("https://huggingface.co/api/datasets");
339
+ const data = await response.json();
340
+
341
+ // Just take the first 20 dataset IDs since they're already sorted
342
+ const trendingDatasets = data
343
+ .slice(0, 20)
344
+ .map((dataset) => dataset.id);
345
+
346
+ trendingDatasetsCache = trendingDatasets;
347
+ cacheTimestamp = Date.now();
348
+ return trendingDatasets;
349
+ } catch (error) {
350
+ console.error("Error fetching trending datasets:", error);
351
+ return [];
352
+ }
353
+ }
354
+
355
+ function displaySuggestions(datasets, suggestionsBox) {
356
+ if (datasets.length > 0) {
357
+ suggestionsBox.innerHTML = datasets
358
+ .map(
359
+ (datasetId) => `
360
+ <div
361
+ class="p-3 hover:bg-gray-50 cursor-pointer border-b last:border-b-0"
362
+ onclick="selectSuggestion('${datasetId}')"
363
+ >
364
+ <div class="flex items-center gap-2">
365
+ <i data-lucide="database" class="w-4 h-4 text-blue-500"></i>
366
+ <span>${datasetId}</span>
367
+ </div>
368
+ </div>
369
+ `
370
+ )
371
+ .join("");
372
+ suggestionsBox.classList.remove("hidden");
373
+ lucide.createIcons();
374
+ } else {
375
+ suggestionsBox.classList.add("hidden");
376
+ }
377
+ }
378
+
379
+ function selectSuggestion(dataset) {
380
+ const datasetInput = document.getElementById("datasetInput");
381
+ const suggestionsBox = document.getElementById("suggestionsBox");
382
+
383
+ datasetInput.value = dataset;
384
+ suggestionsBox.classList.add("hidden");
385
+ findSimilarDatasets();
386
+ }
387
+
388
  // Find similar datasets
389
  async function findSimilarDatasets(page = 1) {
390
  const datasetId = document.getElementById("datasetInput").value;
391
  if (!datasetId) return;
392
 
393
+ const similarLoader = document.getElementById("similarLoader");
394
+ if (similarLoader) {
395
+ similarLoader.classList.remove("hidden");
396
+ }
397
  document.getElementById("errorMessage").classList.add("hidden");
398
 
399
  try {
 
409
  } catch (error) {
410
  showError("Failed to find similar datasets. Please try again.");
411
  } finally {
412
+ if (similarLoader) {
413
+ similarLoader.classList.add("hidden");
414
+ }
415
  }
416
  }
417
 
 
440
  </button>`
441
  : results.length >= MAX_RESULTS
442
  ? `<div class="text-center mt-4 p-6 bg-blue-50 rounded-lg">
443
+ <p class="text-gray-700 mb-3">�� You've reached the end of our dataset journey! (${MAX_RESULTS} results)</p>
444
  <p class="text-gray-600 mb-4">Can't find what you're looking for? Why not create and share your own dataset?</p>
445
  <a href="https://huggingface.co/docs/datasets/upload_dataset"
446
  target="_blank"
 
526
  ? "rotate(0deg)"
527
  : "rotate(90deg)";
528
  }
529
+
530
+ // Update the event listeners section
531
+ document.addEventListener("DOMContentLoaded", () => {
532
+ // ... existing event listeners ...
533
+
534
+ const datasetInput = document.getElementById("datasetInput");
535
+
536
+ // Add input event listener for suggestions
537
+ datasetInput.addEventListener("input", async (e) => {
538
+ const suggestionsBox = document.getElementById("suggestionsBox");
539
+ const value = e.target.value;
540
+
541
+ if (!value) {
542
+ // Show trending datasets when input is empty
543
+ const trending = await fetchTrendingDatasets();
544
+ displaySuggestions(trending, suggestionsBox);
545
+ } else {
546
+ // Filter trending datasets based on input
547
+ const trending = await fetchTrendingDatasets();
548
+ const filtered = trending.filter((dataset) =>
549
+ dataset.toLowerCase().includes(value.toLowerCase())
550
+ );
551
+ displaySuggestions(filtered, suggestionsBox);
552
+ }
553
+ });
554
+
555
+ // Show trending datasets on focus
556
+ datasetInput.addEventListener("focus", async () => {
557
+ const suggestionsBox = document.getElementById("suggestionsBox");
558
+ const trending = await fetchTrendingDatasets();
559
+ displaySuggestions(trending, suggestionsBox);
560
+ });
561
+ });
562
  </script>
563
  </body>
564
  </html>