commit 3dce5399d6d731d5c3ef3f2bc3bd9b11317ded85
parent f1182068882f61aff7582a69fdc1f857ad2eb00d
Author: Jacob R. Edwards <jacob@jacobedwards.org>
Date: Tue, 22 Oct 2024 09:51:28 -0700
Add floorplan filtering in gallery
Diffstat:
2 files changed, 32 insertions(+), 1 deletion(-)
diff --git a/files/floorplans/index.html b/files/floorplans/index.html
@@ -11,6 +11,8 @@
<body>
<h1>Floorplans</h1>
+ <form><label for="filter">Search: </label><input id="filter" name="q" type="text" disabled></input></form>
+
<hr>
<ul id="floorplans" class="grid"></ul>
diff --git a/files/floorplans/main.js b/files/floorplans/main.js
@@ -11,6 +11,27 @@ function init() {
etc.authorize()
etc.bar()
+ let f = document.getElementById("filter")
+ f.removeAttribute("disabled")
+ f.addEventListener("input", function(ev) {
+ document.querySelectorAll("#floorplans > li").forEach(function(item) {
+ if (item.querySelector("#adder")) {
+ return
+ }
+
+ let data = {}
+ let h = item.querySelector(".floorplan > header")
+ const tc = function(sel) {
+ const e = h.querySelector(sel)
+ return e ? e.textContent : null
+ }
+ data.name = tc(".name_div > h2 > a")
+ data.address = tc(".address")
+ data.synopsis = tc(".synopsis")
+ item.hidden = !matchFloorplan(data, ev.target.value)
+ })
+ })
+
api.fetch("GET", "floorplans/:user")
.then(show_floorplans)
.catch(etc.error)
@@ -322,5 +343,13 @@ function copy_floorplan(floorplan, name, depth) {
}
})
})
-
+}
+
+function matchFloorplan(floorplan, exp) {
+ const ms = function(s, e) {
+ return s ? s.toLowerCase().includes(e) : false
+ }
+
+ exp = exp.toLowerCase()
+ return ms(floorplan.name, exp) || ms(floorplan.address, exp) || ms(floorplan.synopsis, exp)
}