sort extensions by date and add an option to sort by other columns
This commit is contained in:
parent
683287d87f
commit
c9bded39ee
|
@ -162,15 +162,15 @@ def install_extension_from_url(dirname, url):
|
||||||
shutil.rmtree(tmpdir, True)
|
shutil.rmtree(tmpdir, True)
|
||||||
|
|
||||||
|
|
||||||
def install_extension_from_index(url, hide_tags):
|
def install_extension_from_index(url, hide_tags, sort_column):
|
||||||
ext_table, message = install_extension_from_url(None, url)
|
ext_table, message = install_extension_from_url(None, url)
|
||||||
|
|
||||||
code, _ = refresh_available_extensions_from_data(hide_tags)
|
code, _ = refresh_available_extensions_from_data(hide_tags, sort_column)
|
||||||
|
|
||||||
return code, ext_table, message
|
return code, ext_table, message
|
||||||
|
|
||||||
|
|
||||||
def refresh_available_extensions(url, hide_tags):
|
def refresh_available_extensions(url, hide_tags, sort_column):
|
||||||
global available_extensions
|
global available_extensions
|
||||||
|
|
||||||
import urllib.request
|
import urllib.request
|
||||||
|
@ -179,18 +179,28 @@ def refresh_available_extensions(url, hide_tags):
|
||||||
|
|
||||||
available_extensions = json.loads(text)
|
available_extensions = json.loads(text)
|
||||||
|
|
||||||
code, tags = refresh_available_extensions_from_data(hide_tags)
|
code, tags = refresh_available_extensions_from_data(hide_tags, sort_column)
|
||||||
|
|
||||||
return url, code, gr.CheckboxGroup.update(choices=tags), ''
|
return url, code, gr.CheckboxGroup.update(choices=tags), ''
|
||||||
|
|
||||||
|
|
||||||
def refresh_available_extensions_for_tags(hide_tags):
|
def refresh_available_extensions_for_tags(hide_tags, sort_column):
|
||||||
code, _ = refresh_available_extensions_from_data(hide_tags)
|
code, _ = refresh_available_extensions_from_data(hide_tags, sort_column)
|
||||||
|
|
||||||
return code, ''
|
return code, ''
|
||||||
|
|
||||||
|
|
||||||
def refresh_available_extensions_from_data(hide_tags):
|
sort_ordering = [
|
||||||
|
# (reverse, order_by_function)
|
||||||
|
(True, lambda x: x.get('added', 'z')),
|
||||||
|
(False, lambda x: x.get('added', 'z')),
|
||||||
|
(False, lambda x: x.get('name', 'z')),
|
||||||
|
(True, lambda x: x.get('name', 'z')),
|
||||||
|
(False, lambda x: 'z'),
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
|
def refresh_available_extensions_from_data(hide_tags, sort_column):
|
||||||
extlist = available_extensions["extensions"]
|
extlist = available_extensions["extensions"]
|
||||||
installed_extension_urls = {normalize_git_url(extension.remote): extension.name for extension in extensions.extensions}
|
installed_extension_urls = {normalize_git_url(extension.remote): extension.name for extension in extensions.extensions}
|
||||||
|
|
||||||
|
@ -210,8 +220,11 @@ def refresh_available_extensions_from_data(hide_tags):
|
||||||
<tbody>
|
<tbody>
|
||||||
"""
|
"""
|
||||||
|
|
||||||
for ext in extlist:
|
sort_reverse, sort_function = sort_ordering[sort_column if 0 <= sort_column < len(sort_ordering) else 0]
|
||||||
|
|
||||||
|
for ext in sorted(extlist, key=sort_function, reverse=sort_reverse):
|
||||||
name = ext.get("name", "noname")
|
name = ext.get("name", "noname")
|
||||||
|
added = ext.get('added', 'unknown')
|
||||||
url = ext.get("url", None)
|
url = ext.get("url", None)
|
||||||
description = ext.get("description", "")
|
description = ext.get("description", "")
|
||||||
extension_tags = ext.get("tags", [])
|
extension_tags = ext.get("tags", [])
|
||||||
|
@ -233,7 +246,7 @@ def refresh_available_extensions_from_data(hide_tags):
|
||||||
code += f"""
|
code += f"""
|
||||||
<tr>
|
<tr>
|
||||||
<td><a href="{html.escape(url)}" target="_blank">{html.escape(name)}</a><br />{tags_text}</td>
|
<td><a href="{html.escape(url)}" target="_blank">{html.escape(name)}</a><br />{tags_text}</td>
|
||||||
<td>{html.escape(description)}</td>
|
<td>{html.escape(description)}<p class="info"><span class="date_added">Added: {html.escape(added)}</span></p></td>
|
||||||
<td>{install_code}</td>
|
<td>{install_code}</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
|
||||||
|
@ -291,25 +304,32 @@ def create_ui():
|
||||||
|
|
||||||
with gr.Row():
|
with gr.Row():
|
||||||
hide_tags = gr.CheckboxGroup(value=["ads", "localization", "installed"], label="Hide extensions with tags", choices=["script", "ads", "localization", "installed"])
|
hide_tags = gr.CheckboxGroup(value=["ads", "localization", "installed"], label="Hide extensions with tags", choices=["script", "ads", "localization", "installed"])
|
||||||
|
sort_column = gr.Radio(value="newest first", label="Order", choices=["newest first", "oldest first", "a-z", "z-a", "internal order", ], type="index")
|
||||||
|
|
||||||
install_result = gr.HTML()
|
install_result = gr.HTML()
|
||||||
available_extensions_table = gr.HTML()
|
available_extensions_table = gr.HTML()
|
||||||
|
|
||||||
refresh_available_extensions_button.click(
|
refresh_available_extensions_button.click(
|
||||||
fn=modules.ui.wrap_gradio_call(refresh_available_extensions, extra_outputs=[gr.update(), gr.update(), gr.update()]),
|
fn=modules.ui.wrap_gradio_call(refresh_available_extensions, extra_outputs=[gr.update(), gr.update(), gr.update()]),
|
||||||
inputs=[available_extensions_index, hide_tags],
|
inputs=[available_extensions_index, hide_tags, sort_column],
|
||||||
outputs=[available_extensions_index, available_extensions_table, hide_tags, install_result],
|
outputs=[available_extensions_index, available_extensions_table, hide_tags, install_result],
|
||||||
)
|
)
|
||||||
|
|
||||||
install_extension_button.click(
|
install_extension_button.click(
|
||||||
fn=modules.ui.wrap_gradio_call(install_extension_from_index, extra_outputs=[gr.update(), gr.update()]),
|
fn=modules.ui.wrap_gradio_call(install_extension_from_index, extra_outputs=[gr.update(), gr.update()]),
|
||||||
inputs=[extension_to_install, hide_tags],
|
inputs=[extension_to_install, hide_tags, sort_column],
|
||||||
outputs=[available_extensions_table, extensions_table, install_result],
|
outputs=[available_extensions_table, extensions_table, install_result],
|
||||||
)
|
)
|
||||||
|
|
||||||
hide_tags.change(
|
hide_tags.change(
|
||||||
fn=modules.ui.wrap_gradio_call(refresh_available_extensions_for_tags, extra_outputs=[gr.update()]),
|
fn=modules.ui.wrap_gradio_call(refresh_available_extensions_for_tags, extra_outputs=[gr.update()]),
|
||||||
inputs=[hide_tags],
|
inputs=[hide_tags, sort_column],
|
||||||
|
outputs=[available_extensions_table, install_result]
|
||||||
|
)
|
||||||
|
|
||||||
|
sort_column.change(
|
||||||
|
fn=modules.ui.wrap_gradio_call(refresh_available_extensions_for_tags, extra_outputs=[gr.update()]),
|
||||||
|
inputs=[hide_tags, sort_column],
|
||||||
outputs=[available_extensions_table, install_result]
|
outputs=[available_extensions_table, install_result]
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
11
style.css
11
style.css
|
@ -555,7 +555,7 @@ img2maskimg, #img2maskimg > .h-60, #img2maskimg > .h-60 > div, #img2maskimg > .h
|
||||||
|
|
||||||
/* Extensions */
|
/* Extensions */
|
||||||
|
|
||||||
#tab_extensions table{
|
#tab_extensions table``{
|
||||||
border-collapse: collapse;
|
border-collapse: collapse;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -581,6 +581,15 @@ img2maskimg, #img2maskimg > .h-60, #img2maskimg > .h-60 > div, #img2maskimg > .h
|
||||||
font-size: 95%;
|
font-size: 95%;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#available_extensions .info{
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#available_extensions .date_added{
|
||||||
|
opacity: 0.85;
|
||||||
|
font-size: 90%;
|
||||||
|
}
|
||||||
|
|
||||||
#image_buttons_txt2img button, #image_buttons_img2img button, #image_buttons_extras button{
|
#image_buttons_txt2img button, #image_buttons_img2img button, #image_buttons_extras button{
|
||||||
min-width: auto;
|
min-width: auto;
|
||||||
padding-left: 0.5em;
|
padding-left: 0.5em;
|
||||||
|
|
Loading…
Reference in New Issue