diff --git a/javascript/ui.js b/javascript/ui.js index 52a9341ce..e097522d5 100644 --- a/javascript/ui.js +++ b/javascript/ui.js @@ -249,8 +249,21 @@ onOptionsChanged(function(){ elem.title = sd_checkpoint_hash elem.href = "https://google.com/search?q=" + sd_checkpoint_hash } + + setting_elems = gradioApp().querySelectorAll('#settings [id^="setting_"]') + setting_elems.forEach(function(elem){ + setting_name = elem.id.replace("setting_", "") + markIfModified(setting_name, opts[setting_name]) + }) }) +function markIfModified(setting_name, value) { + elem = gradioApp().getElementById("setting_"+setting_name) + if(elem == null) return; + let is_new_value = value != opts[setting_name] + elem.classList.toggle("modified", is_new_value) +} + let txt2img_textarea, img2img_textarea = undefined; let wait_time = 800 let token_timeouts = {}; diff --git a/modules/ui.py b/modules/ui.py index 12e888308..72164b5df 100644 --- a/modules/ui.py +++ b/modules/ui.py @@ -1222,6 +1222,10 @@ def create_ui(): create_refresh_button(res, info.refresh, info.component_args, "refresh_" + key) else: res = comp(label=info.label, value=fun(), elem_id=elem_id, **(args or {})) + + if not is_quicksettings: + res.change(fn=None, inputs=res, outputs=[], _js=f'(val) => markIfModified("{key}", val)') + return res components = [] diff --git a/style.css b/style.css index a2f03ca7f..8327bb1cc 100644 --- a/style.css +++ b/style.css @@ -244,6 +244,21 @@ div#extras_scale_to_tab div.form{ margin-top: 0; } +#settings [id^="setting_"] { + margin-left: 1.2em; +} + +#settings [id^="setting_"].modified::before { + content: ""; + width: .25em; + position: absolute; + height: 100%; + left: -.75em; + background-color: var(--color-accent); + background-clip: content-box; + border-radius: 1em; +} + #settings_result{ height: 1.4em; margin: 0 1.2em;