pigeondrop 1.5.0 → 1.6.1

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.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,17 @@
1
1
  # What's new
2
2
 
3
+ ## v1.6.1 — 2 November 2026
4
+
5
+ - Changed: **The page heading reads Pigeonhole.** It is no longer shown in capitals.
6
+
7
+ ## v1.6.0 — 2 November 2026
8
+
9
+ - New: **Filter the file list by name.** Type in the box above the list to show only the files and folders whose names contain what you typed.
10
+
11
+ ## v1.5.1 — 16 October 2026
12
+
13
+ - Changed: **Pigeonhole's code now lives at github.com/cventour/pigeondrop.** Old links and install commands still work.
14
+
3
15
  ## v1.5.0 — 16 October 2026
4
16
 
5
17
  - New: **Run it with npx.** `npx pigeondrop` starts Pigeonhole in the folder you are in, with nothing to install. Its files and settings stay in that folder.
package/README.md CHANGED
@@ -61,7 +61,7 @@ Also WSL, and anything else with bash.
61
61
  ## Install it
62
62
 
63
63
  ```bash
64
- curl -fsSL https://raw.githubusercontent.com/cventour/pigeonhole/main/install.sh -o install.sh
64
+ curl -fsSL https://raw.githubusercontent.com/cventour/pigeondrop/main/install.sh -o install.sh
65
65
  ```
66
66
 
67
67
  Read it — it is about a hundred lines and does nothing surprising. Then:
@@ -97,7 +97,7 @@ Run the script again later and it updates the copy it installed.
97
97
  The script saves typing, not much else. The manual version is three lines:
98
98
 
99
99
  ```bash
100
- git clone https://github.com/cventour/pigeonhole.git
100
+ git clone https://github.com/cventour/pigeondrop.git
101
101
  cd pigeonhole
102
102
  node server.js
103
103
  ```
@@ -243,7 +243,7 @@ PowerShell 7.
243
243
  ## Install it
244
244
 
245
245
  ```powershell
246
- irm https://raw.githubusercontent.com/cventour/pigeonhole/main/install.ps1 -OutFile install.ps1
246
+ irm https://raw.githubusercontent.com/cventour/pigeondrop/main/install.ps1 -OutFile install.ps1
247
247
  ```
248
248
 
249
249
  Read it — it is about a hundred lines and does nothing surprising. Then:
@@ -285,7 +285,7 @@ Run the script again later and it updates the copy it installed.
285
285
  The script saves typing, not much else. The manual version is three lines:
286
286
 
287
287
  ```powershell
288
- git clone https://github.com/cventour/pigeonhole.git
288
+ git clone https://github.com/cventour/pigeondrop.git
289
289
  cd pigeonhole
290
290
  node server.js
291
291
  ```
@@ -294,9 +294,9 @@ Windows does not ship with git, so on a fresh machine that first line fails.
294
294
  Take the zip instead — this needs nothing that is not already there:
295
295
 
296
296
  ```powershell
297
- irm https://github.com/cventour/pigeonhole/archive/refs/heads/main.zip -OutFile pigeonhole.zip
298
- Expand-Archive pigeonhole.zip -DestinationPath .
299
- cd pigeonhole-main
297
+ irm https://github.com/cventour/pigeondrop/archive/refs/heads/main.zip -OutFile pigeondrop.zip
298
+ Expand-Archive pigeondrop.zip -DestinationPath .
299
+ cd pigeondrop-main
300
300
  node server.js
301
301
  ```
302
302
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pigeondrop",
3
- "version": "1.5.0",
3
+ "version": "1.6.1",
4
4
  "description": "A small self-hosted file manager with no dependencies. Drag-and-drop upload with progress, browse, rename, delete, download files or folders as zip.",
5
5
  "type": "module",
6
6
  "main": "server.js",
@@ -9,6 +9,6 @@
9
9
  "engines": { "node": ">=20" },
10
10
  "license": "MIT",
11
11
  "keywords": ["file-manager", "upload", "self-hosted", "zero-dependency", "http"],
12
- "repository": { "type": "git", "url": "git+https://github.com/cventour/pigeonhole.git" },
12
+ "repository": { "type": "git", "url": "git+https://github.com/cventour/pigeondrop.git" },
13
13
  "files": ["server.js", "public", "icon.svg", "README.md", "LICENSE", "CHANGELOG.md"]
14
14
  }
package/public/index.html CHANGED
@@ -45,7 +45,7 @@ body{margin:0;background:var(--panel);color:var(--ink);font-family:var(--sans);
45
45
 
46
46
  .wrap{max-width:1080px;margin:0 auto;padding:0 var(--gut)}
47
47
  header{padding:clamp(28px,5vw,48px) 0 20px}
48
- h1{font-family:var(--narrow);font-weight:700;margin:0;text-transform:uppercase;
48
+ h1{font-family:var(--narrow);font-weight:700;margin:0;
49
49
  font-size:clamp(1.6rem,4vw,2.5rem);line-height:1;letter-spacing:-.02em}
50
50
  .brand{display:flex;align-items:center;gap:14px}
51
51
  .brand svg{width:clamp(36px,6vw,48px);height:auto;flex:none}
@@ -103,6 +103,10 @@ button.act.primary:hover{background:var(--signal);color:#0d0f11;border-color:var
103
103
  .q-retry:hover{background:var(--signal);color:#0d0f11;border-color:var(--signal)}
104
104
 
105
105
  /* --- listing --- */
106
+ .search{display:block;width:100%;padding:10px 12px;margin:0 0 -1px;
107
+ font-family:var(--mono);font-size:.85rem;color:var(--ink);
108
+ background:var(--panel);border:1px solid var(--rule)}
109
+ .search:focus{outline:none;border-color:var(--signal)}
106
110
  .tablewrap{border:1px solid var(--rule);background:var(--panel-lo);overflow-x:auto}
107
111
  table{width:100%;border-collapse:collapse;min-width:520px}
108
112
  th{text-align:left;font-family:var(--mono);font-weight:500;font-size:.75rem;
@@ -262,6 +266,7 @@ footer a{color:var(--steel-dim)}
262
266
  <div class="queue" id="queue"></div>
263
267
  <p class="msg" id="msg" role="status"></p>
264
268
 
269
+ <input type="search" class="search" id="search" placeholder="Filter by name" aria-label="Filter files by name" autocomplete="off" spellcheck="false">
265
270
  <div class="tablewrap">
266
271
  <table>
267
272
  <thead><tr>
@@ -278,7 +283,7 @@ footer a{color:var(--steel-dim)}
278
283
  <span id="rootname"></span>
279
284
  <span id="scanstate"></span>
280
285
  <span>no authentication — trusted networks only</span>
281
- <span><a href="https://github.com/cventour/pigeonhole">pigeonhole</a></span>
286
+ <span><a href="https://github.com/cventour/pigeondrop">pigeonhole</a></span>
282
287
  </footer>
283
288
  </div>
284
289
 
@@ -462,7 +467,7 @@ function drawCrumbs() {
462
467
  $('drop-target').textContent = cwd;
463
468
  }
464
469
 
465
- async function go(dir) { cwd = dir || '/'; selected.clear(); await refresh(); }
470
+ async function go(dir) { cwd = dir || '/'; selected.clear(); $('search').value = ''; await refresh(); }
466
471
 
467
472
  // --- selection and download ------------------------------------------------
468
473
  // Paths of the ticked rows in this folder. A single file downloads as itself;
@@ -595,6 +600,8 @@ for (const th of document.querySelectorAll('th[data-k]')) {
595
600
  };
596
601
  }
597
602
 
603
+ $('search').oninput = () => render();
604
+
598
605
  async function refresh() {
599
606
  drawCrumbs();
600
607
  let data;
@@ -630,7 +637,15 @@ function render() {
630
637
  return;
631
638
  }
632
639
 
633
- for (const it of sorted(items)) {
640
+ const q = $('search').value.trim().toLowerCase();
641
+ const list = q ? items.filter(it => it.name.toLowerCase().includes(q)) : items;
642
+ if (q && !list.length) {
643
+ const tr = document.createElement('tr');
644
+ tr.innerHTML = '<td colspan="5" class="empty">No names match.</td>';
645
+ rows.append(tr);
646
+ }
647
+
648
+ for (const it of sorted(list)) {
634
649
  const full = (cwd === '/' ? '' : cwd) + '/' + it.name;
635
650
  const tr = document.createElement('tr');
636
651
  tr.innerHTML = `