From f3d83fd68ab2458f0a24fb242e557b95c1294bb1 Mon Sep 17 00:00:00 2001 From: AUTOMATIC <16777216c@gmail.com> Date: Sun, 18 Sep 2022 22:25:18 +0300 Subject: [PATCH] add read access to settings for jsavascript add an option to disable lightbox modal --- javascript/imageviewer.js | 4 ++-- javascript/ui.js | 39 +++++++++++++++++++++++++++++++++++++++ modules/shared.py | 5 +++++ modules/ui.py | 13 +++++++++++-- script.js | 6 +++++- 5 files changed, 62 insertions(+), 5 deletions(-) diff --git a/javascript/imageviewer.js b/javascript/imageviewer.js index 95b8108d..880f1183 100644 --- a/javascript/imageviewer.js +++ b/javascript/imageviewer.js @@ -70,8 +70,8 @@ function showGalleryImage(){ e.style.cursor='pointer' e.addEventListener('click', function (evt) { - showModal(evt) - + if(!opts.js_modal_lightbox) return; + showModal(evt) },true); } }); diff --git a/javascript/ui.js b/javascript/ui.js index c39e96a1..f3860d2e 100644 --- a/javascript/ui.js +++ b/javascript/ui.js @@ -59,3 +59,42 @@ function ask_for_style_name(_, prompt_text, negative_prompt_text) { name_ = prompt('Style name:') return name_ === null ? [null, null, null]: [name_, prompt_text, negative_prompt_text] } + +opts = {} +function apply_settings(jsdata){ + console.log(jsdata) + + opts = JSON.parse(jsdata) + + return jsdata +} + +onUiUpdate(function(){ + if(Object.keys(opts).length != 0) return; + + json_elem = gradioApp().getElementById('settings_json') + if(json_elem == null) return; + + textarea = json_elem.querySelector('textarea') + jsdata = textarea.value + opts = JSON.parse(jsdata) + + + Object.defineProperty(textarea, 'value', { + set: function(newValue) { + var valueProp = Object.getOwnPropertyDescriptor(HTMLTextAreaElement.prototype, 'value'); + var oldValue = valueProp.get.call(textarea); + valueProp.set.call(textarea, newValue); + + if (oldValue != newValue) { + opts = JSON.parse(textarea.value) + } + }, + get: function() { + var valueProp = Object.getOwnPropertyDescriptor(HTMLTextAreaElement.prototype, 'value'); + return valueProp.get.call(textarea); + } + }); + + json_elem.parentElement.style.display="none" +}) diff --git a/modules/shared.py b/modules/shared.py index eb4db55a..78de9f9e 100644 --- a/modules/shared.py +++ b/modules/shared.py @@ -159,6 +159,7 @@ class Options: "interrogate_clip_max_length": OptionInfo(48, "Interrogate: maximum description length", gr.Slider, {"minimum": 1, "maximum": 256, "step": 1}), "interrogate_clip_dict_limit": OptionInfo(1500, "Interrogate: maximum number of lines in text file (0 = No limit)"), "sd_model_checkpoint": OptionInfo(None, "Stable Diffusion checkpoint", gr.Radio, lambda: {"choices": [x.title for x in modules.sd_models.checkpoints_list.values()]}), + "js_modal_lightbox": OptionInfo(True, "Enable full page image viewer"), } def __init__(self): @@ -193,6 +194,10 @@ class Options: item = self.data_labels.get(key) item.onchange = func + def dumpjson(self): + d = {k: self.data.get(k, self.data_labels.get(k).default) for k in self.data_labels.keys()} + return json.dumps(d) + opts = Options() if os.path.exists(config_filename): diff --git a/modules/ui.py b/modules/ui.py index 7500aae7..0303e057 100644 --- a/modules/ui.py +++ b/modules/ui.py @@ -858,7 +858,7 @@ def create_ui(txt2img, img2img, run_extras, run_pnginfo): return 'Settings applied.' with gr.Blocks(analytics_enabled=False) as settings_interface: - submit = gr.Button(value="Apply settings", variant='primary') + settings_submit = gr.Button(value="Apply settings", variant='primary') result = gr.HTML() with gr.Row(elem_id="settings").style(equal_height=False): @@ -870,7 +870,7 @@ def create_ui(txt2img, img2img, run_extras, run_pnginfo): if index < len(keys): components.append(create_setting_component(keys[index])) - submit.click( + settings_submit.click( fn=run_settings, inputs=components, outputs=[result] @@ -896,11 +896,20 @@ def create_ui(txt2img, img2img, run_extras, run_pnginfo): css += css_hide_progressbar with gr.Blocks(css=css, analytics_enabled=False, title="Stable Diffusion") as demo: + with gr.Tabs() as tabs: for interface, label, ifid in interfaces: with gr.TabItem(label, id=ifid): interface.render() + text_settings = gr.Textbox(elem_id="settings_json", value=opts.dumpjson(), visible=False) + + settings_submit.click( + fn=lambda: opts.dumpjson(), + inputs=[], + outputs=[text_settings], + ) + tabs.change( fn=lambda x: x, inputs=[init_img_with_mask], diff --git a/script.js b/script.js index 1a258cd9..a1b93ae9 100644 --- a/script.js +++ b/script.js @@ -9,7 +9,11 @@ function onUiUpdate(callback){ function uiUpdate(root){ uiUpdateCallbacks.forEach(function(x){ - x() + try { + x() + } catch (e) { + (console.error || console.log).call(console, e.message, e); + } }) }