www.spaceplanner.app

Web client to the spaceplanner API
git clone git://jacobedwards.org/www.spaceplanner.app
Log | Files | Refs

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:
Mfiles/floorplans/index.html | 2++
Mfiles/floorplans/main.js | 31++++++++++++++++++++++++++++++-
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) }