70 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			70 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
function explode_sanitize_string_list(list, explodeAt = ",") {
 | 
						|
    let elements = list.split(explodeAt);
 | 
						|
    let sanitized = [];
 | 
						|
    elements.forEach((e) => {
 | 
						|
        if (e.trim() !== "") {
 | 
						|
            sanitized.push(e);
 | 
						|
        }
 | 
						|
    });
 | 
						|
    return sanitized;
 | 
						|
}
 | 
						|
 | 
						|
const HINTBOX_ID = "HINTBOX";
 | 
						|
 | 
						|
function close_hintbox(close_if_focused = false) {
 | 
						|
    setTimeout(() => {
 | 
						|
        if (close_if_focused || (document.getElementById(HINTBOX_ID).firstChild !== document.activeElement)) {
 | 
						|
            hide(HINTBOX_ID);
 | 
						|
        }
 | 
						|
    }, 20);
 | 
						|
}
 | 
						|
function open_hintbox(x, y, contents, print_fun, insert_fun) {
 | 
						|
    let hbw = document.getElementById(HINTBOX_ID);
 | 
						|
    if (hbw === null) {
 | 
						|
        hbw = document.createElement("section");
 | 
						|
        hbw.id = HINTBOX_ID;
 | 
						|
        hbw.classList.add("hintbox-window");
 | 
						|
        let lb = document.createElement("select");
 | 
						|
        lb.size = 5;
 | 
						|
        lb.style.width = "100%";
 | 
						|
        hbw.appendChild(lb);
 | 
						|
        document.body.appendChild(hbw);
 | 
						|
    }
 | 
						|
    let lb = hbw.firstChild;
 | 
						|
 | 
						|
    hbw.style.left = `${x}px`;
 | 
						|
    hbw.style.top = `${y}px`;
 | 
						|
 | 
						|
    lb.innerHTML = "";
 | 
						|
    contents.forEach((record) => {
 | 
						|
        let line = print_fun(record);
 | 
						|
        let opt = document.createElement("option");
 | 
						|
        opt.value = line;
 | 
						|
        opt.innerText = line;
 | 
						|
        lb.appendChild(opt);
 | 
						|
    });
 | 
						|
 | 
						|
    lb.ondblclick = () => {
 | 
						|
        insert_fun(lb.value);
 | 
						|
    };
 | 
						|
    show(HINTBOX_ID);
 | 
						|
}
 | 
						|
 | 
						|
function open_hintbox_at(target_element_id, req_data, print_fn, insert_fn) {
 | 
						|
    let targetF = document.getElementById(target_element_id);
 | 
						|
 | 
						|
    let bbox = targetF.getBoundingClientRect();
 | 
						|
    let list_str = targetF.value.trim().split(",");
 | 
						|
    if (list_str.length > 0) {
 | 
						|
        let last_le_str = list_str[list_str.length - 1].trim();
 | 
						|
        if (last_le_str.length > 2) {
 | 
						|
            req_data["needle"] = last_le_str; // auto-insert needle
 | 
						|
            request(req_data).then(resp => {
 | 
						|
                let groups = JSON.parse(resp);
 | 
						|
                let x = bbox.x + bbox.width;
 | 
						|
                let y = bbox.y;
 | 
						|
                open_hintbox(x, y, groups, print_fn, insert_fn);
 | 
						|
            });
 | 
						|
        }
 | 
						|
    }
 | 
						|
} |