(model, iconMap = {}, prefix = "", filter = "")
| 2790 | |
| 2791 | function updateEmbeddingsList(filter = "") { |
| 2792 | function html(model, iconMap = {}, prefix = "", filter = "") { |
| 2793 | filter = filter.toLowerCase() |
| 2794 | let toplevel = document.createElement("div") |
| 2795 | let folders = document.createElement("div") |
| 2796 | |
| 2797 | let profileName = profileNameField.value |
| 2798 | model?.forEach((m) => { |
| 2799 | if (typeof m == "string") { |
| 2800 | let token = m.toLowerCase() |
| 2801 | if (token.search(filter) != -1) { |
| 2802 | let button |
| 2803 | let img = "/media/images/noimg.png" |
| 2804 | if (token in iconMap) { |
| 2805 | img = `/bucket/${profileName}/${iconMap[token]}` |
| 2806 | } |
| 2807 | button = createModifierCard(m, [img, img], true) |
| 2808 | // } |
| 2809 | button.dataset["embedding"] = m |
| 2810 | button.addEventListener("click", onButtonClick) |
| 2811 | toplevel.appendChild(button) |
| 2812 | } |
| 2813 | } else { |
| 2814 | let subdir = html(m[1], iconMap, prefix + m[0] + "/", filter) |
| 2815 | if (typeof subdir == "object") { |
| 2816 | let div1 = document.createElement("div") |
| 2817 | let div2 = document.createElement("div") |
| 2818 | div1.classList.add("collapsible-content") |
| 2819 | div1.classList.add("embedding-category") |
| 2820 | div1.appendChild(subdir) |
| 2821 | div2.replaceChildren(htmlToElement(`<h4 class="collapsible">${prefix}${m[0]}</h4>`), div1) |
| 2822 | folders.appendChild(div2) |
| 2823 | } |
| 2824 | } |
| 2825 | }) |
| 2826 | |
| 2827 | if (toplevel.children.length == 0 && folders.children.length == 0) { |
| 2828 | // Empty folder |
| 2829 | return "" |
| 2830 | } |
| 2831 | |
| 2832 | let result = document.createElement("div") |
| 2833 | result.replaceChildren(toplevel, htmlToElement('<br style="clear: both;">'), folders) |
| 2834 | return result |
| 2835 | } |
| 2836 | |
| 2837 | function onButtonClick(e) { |
| 2838 | let text = e.target.closest("[data-embedding]").dataset["embedding"] |
no test coverage detected