File size: 1,536 Bytes
68fbb7f
 
 
 
f3794ea
 
68fbb7f
 
 
 
 
 
 
 
 
f3794ea
68fbb7f
 
 
 
 
 
 
 
f3794ea
68fbb7f
 
 
 
 
f3794ea
 
 
 
 
 
 
 
 
 
 
 
 
 
68fbb7f
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
export class AvailableModelsSelectWidget {
    constructor({ widget_id = null, widget_title = null } = {}) {
        this.widget_id = widget_id;
        this.widget_title = widget_title || "Available Models";
        this.observer = null;
        this.available_models_select = $("#available-models-select");
    }
    spawn_in_parent(parent, position = "append") {
        this.create_widget();
        this.update_select_options();
        if (position === "prepend") {
            parent.prepend(this.widget);
        } else {
            parent.append(this.widget);
        }
        this.observe_changes();
    }
    create_widget() {
        this.widget_html = `
        <select class="form-select" id="${this.widget_id}-select" title="${this.widget_title}"></select>
        `;
        this.widget = $(this.widget_html);
    }
    update_select_options() {
        let options = this.available_models_select.find("option");
        this.widget.empty();
        options.each((i, option) => {
            this.widget.append($(option).clone());
        });
    }
    observe_changes() {
        this.observer = new MutationObserver((mutationsList, observer) => {
            for (let mutation of mutationsList) {
                if (mutation.type === "childList") {
                    this.update_select_options();
                }
            }
        });
        this.observer.observe(this.available_models_select[0], {
            attributes: false,
            childList: true,
            subtree: true,
        });
    }
}