File size: 2,497 Bytes
0690950 |
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 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 |
(function() {
if (!globalThis.LLuL) globalThis.LLuL = {};
const OBJ = (function (NAME) {
let _r = 0;
function to_gradio(v) {
// force call `change` event on gradio
return [v.toString(), (_r++).toString()];
}
function js2py(type, gradio_field, value) {
// set `value` to gradio's field
// (1) Click gradio's button.
// (2) Gradio will fire js callback to retrieve value to be set.
// (3) Gradio will fire another js callback to notify the process has been completed.
return new Promise(resolve => {
const callback_name = `${NAME}-${type}-${gradio_field}`;
// (2)
globalThis[callback_name] = () => {
delete globalThis[callback_name];
// (3)
const callback_after = callback_name + '_after';
globalThis[callback_after] = () => {
delete globalThis[callback_after];
resolve();
};
return to_gradio(value);
};
// (1)
gradioApp().querySelector(`#${callback_name}_set`).click();
});
}
function py2js(type, pyname, ...args) {
// call python's function
// (1) Set args to gradio's field
// (2) Click gradio's button
// (3) JS callback will be kicked with return value from gradio
// (1)
return (args.length == 0 ? Promise.resolve() : js2py(type, pyname + '_args', JSON.stringify(args)))
.then(() => {
return new Promise(resolve => {
const callback_name = `${NAME}-${type}-${pyname}`;
// (3)
globalThis[callback_name] = value => {
delete globalThis[callback_name];
resolve(value);
}
// (2)
gradioApp().querySelector(`#${callback_name}_get`).click();
});
});
}
return { js2py, py2js }
})('llul');
if (!globalThis.LLuL.js2py) globalThis.LLuL.js2py = OBJ.js2py;
if (!globalThis.LLuL.py2js) globalThis.LLuL.py2js = OBJ.py2js;
})(); |