| <!DOCTYPE html> |
| <html> |
|
|
| <head> |
| <style> |
| .container { |
| max-width: 768px; |
| display: flex; |
| flex-direction: row; |
| flex-wrap: wrap; |
| margin: 0 auto; |
| } |
| |
| .color-picker { |
| position: sticky; |
| top: 20px; |
| height: 50px; |
| } |
| |
| .img-img { |
| width: 128px; |
| } |
| </style> |
|
|
| <script> |
| let mClient; |
| async function preload() { |
| const Gradio = await import("https://cdn.jsdelivr.net/npm/@gradio/client/dist/index.min.js"); |
| mClient = await Gradio.Client.connect("visualizedata/PSAM5020-ColorSort-Gradio"); |
| document.getElementById("color-picker").dispatchEvent(new Event('change')); |
| } |
| preload(); |
| |
| const IMGS_URL = "https://raw.githubusercontent.com/PSAM-5020-2025F-A/5020-utils/main/datasets/image/flowers"; |
| |
| function orderImages(imageFiles) { |
| const container = document.getElementById('main-container'); |
| container.innerHTML = ""; |
| |
| imageFiles.forEach((fname, i) => { |
| const imgDivEl = document.createElement("div"); |
| imgDivEl.classList.add("img-container"); |
| container.appendChild(imgDivEl); |
| |
| const imgEl = document.createElement("img"); |
| imgEl.setAttribute("src", `${IMGS_URL}/${fname}`); |
| imgEl.classList.add("img-img"); |
| imgDivEl.appendChild(imgEl); |
| }); |
| } |
| |
| window.addEventListener("load", (event) => { |
| const colorEl = document.getElementById("color-picker"); |
| colorEl.addEventListener("change", async (event) => { |
| document.getElementById('main-container').innerHTML = "Loading..."; |
| const result = await mClient.predict("/order_by_color", { |
| center_color_str: event.target.value |
| }); |
| orderImages(result.data[0].files); |
| }); |
| }); |
| </script> |
| </head> |
|
|
| <body> |
| <input type="color" id="color-picker" class="color-picker" value="#fffffe"> |
| <div id="main-container" class="container"></div> |
| </body> |
|
|
| </html> |
|
|