diff options
author | pommicket <pommicket@gmail.com> | 2023-07-25 11:40:15 -0400 |
---|---|---|
committer | pommicket <pommicket@gmail.com> | 2023-07-25 11:40:15 -0400 |
commit | 16e837bb5a427b0d2895d04b12d8dcd8257b1846 (patch) | |
tree | 2bd5d1569e2ff88dc8c39ba15eb905a1e3794a33 | |
parent | 2d732c5467128f2f3a3b668a19e4f62a704bdade (diff) |
search working
-rw-r--r-- | fractiform.js | 25 |
1 files changed, 22 insertions, 3 deletions
diff --git a/fractiform.js b/fractiform.js index b0ebf9a..921b1f6 100644 --- a/fractiform.js +++ b/fractiform.js @@ -305,6 +305,16 @@ ${type} clamp_(${type} x, ${type} minimum, ${type} maximum) { `).join('\n'), ]; +function is_input(element) { + if (!element) return false; + for (let e = element; e; e = e.parentElement) { + if (e.tagName === 'INPUT' || e.tagName === 'BUTTON' || e.tagName === 'SELECT' || e.isContentEditable) { + return true; + } + } + return false; +} + class Parser { constructor(string, line_number) { this.string = string; @@ -680,7 +690,7 @@ void main() { function on_key_press(e) { update_key_modifiers_from_event(e); let code = e.keyCode; - if (e.target.tagName === 'INPUT' || e.target.tagName === 'BUTTON' || e.target.isContentEditable) { + if (is_input(e.target)) { return; } console.log('key press', code); @@ -951,7 +961,7 @@ function add_widget(func) { } root.addEventListener('click', (e) => { - if (e.target.tagName === 'INPUT' || e.target.isContentEditable || e.target.tagName === 'SELECT' || e.target.tagName === 'OPTION') + if (is_input(e.target)) return; set_display_output_and_update_shader(root); e.preventDefault(); @@ -1429,7 +1439,15 @@ function update_widget_choices() { for (const choice of choices) { let name = widget_info.get(choice.dataset.id).name; let shown = name.toLowerCase().indexOf(search_term) !== -1; - choice.display = shown ? 'block' : 'none'; + choice.style.display = shown ? 'block' : 'none'; + } + for (const category of widget_choices.getElementsByClassName('widget-category')) { + if (Array.from(category.getElementsByClassName('widget-choice')).some((x) => x.style.display === 'block')) { + category.style.display = 'block'; + category.open = search_term !== ''; + } else { + category.style.display = 'none'; + } } } @@ -1542,6 +1560,7 @@ void main() { for (const cat of category_names) { const category_element = document.createElement('details'); + category_element.classList.add('widget-category'); const category_title = document.createElement('summary'); category_title.appendChild(document.createTextNode(cat)); category_element.appendChild(category_title); |