From 18d801a13d71b9a9e66722dead8b2e4a7a5612a9 Mon Sep 17 00:00:00 2001
From: AUTOMATIC1111 <16777216c@gmail.com>
Date: Sat, 9 Mar 2024 08:25:01 +0300
Subject: [PATCH] stylistic changes for extra network sorting/search controls
---
html/extra-networks-pane.html | 51 ++++++++++++++++++++++++++++------
javascript/extraNetworks.js | 52 +++++++++++++----------------------
modules/ui_extra_networks.py | 12 ++++----
style.css | 29 +++++++++++++++----
4 files changed, 89 insertions(+), 55 deletions(-)
diff --git a/html/extra-networks-pane.html b/html/extra-networks-pane.html
index ff8a73ad2..9a67baea9 100644
--- a/html/extra-networks-pane.html
+++ b/html/extra-networks-pane.html
@@ -5,19 +5,49 @@
id="{tabname}_{extra_networks_tabname}_extra_search"
class="extra-network-control--search-text"
type="search"
- placeholder="Filter files"
+ placeholder="Search"
>
+
+ Sort:
+
+
+
+
+
+
+
+
{pane_content}
diff --git a/javascript/extraNetworks.js b/javascript/extraNetworks.js
index a816f4981..8c390ab89 100644
--- a/javascript/extraNetworks.js
+++ b/javascript/extraNetworks.js
@@ -39,12 +39,12 @@ function setupExtraNetworksForTab(tabname) {
// tabname_full = {tabname}_{extra_networks_tabname}
var tabname_full = elem.id;
var search = gradioApp().querySelector("#" + tabname_full + "_extra_search");
- var sort_mode = gradioApp().querySelector("#" + tabname_full + "_extra_sort");
var sort_dir = gradioApp().querySelector("#" + tabname_full + "_extra_sort_dir");
var refresh = gradioApp().querySelector("#" + tabname_full + "_extra_refresh");
+ var currentSort = '';
// If any of the buttons above don't exist, we want to skip this iteration of the loop.
- if (!search || !sort_mode || !sort_dir || !refresh) {
+ if (!search || !sort_dir || !refresh) {
return; // `return` is equivalent of `continue` but for forEach loops.
}
@@ -74,19 +74,20 @@ function setupExtraNetworksForTab(tabname) {
var cards = gradioApp().querySelectorAll('#' + tabname_full + ' div.card');
var parent = gradioApp().querySelector('#' + tabname_full + "_cards");
var reverse = sort_dir.dataset.sortdir == "Descending";
- var sortKey = sort_mode.dataset.sortmode.toLowerCase().replace("sort", "").replaceAll(" ", "_").replace(/_+$/, "").trim() || "name";
- sortKey = "sort" + sortKey.charAt(0).toUpperCase() + sortKey.slice(1);
- var sortKeyStore = sortKey + "-" + (reverse ? "Descending" : "Ascending") + "-" + cards.length;
+ var activeSearchElem = gradioApp().querySelector('#' + tabname_full + "_controls .extra-network-control--sort.extra-network-control--enabled");
+ var sortKey = activeSearchElem ? activeSearchElem.dataset.sortkey : "default";
+ var sortKeyDataField = "sort" + sortKey.charAt(0).toUpperCase() + sortKey.slice(1);
+ var sortKeyStore = sortKey + "-" + sort_dir.dataset.sortdir + "-" + cards.length;
- if (sortKeyStore == sort_mode.dataset.sortkey && !force) {
+ if (sortKeyStore == currentSort && !force) {
return;
}
- sort_mode.dataset.sortkey = sortKeyStore;
+ currentSort = sortKeyStore;
var sortedCards = Array.from(cards);
sortedCards.sort(function(cardA, cardB) {
- var a = cardA.dataset[sortKey];
- var b = cardB.dataset[sortKey];
+ var a = cardA.dataset[sortKeyDataField];
+ var b = cardB.dataset[sortKeyDataField];
if (!isNaN(a) && !isNaN(b)) {
return parseInt(a) - parseInt(b);
}
@@ -395,31 +396,16 @@ function extraNetworksTreeOnClick(event, tabname, extra_networks_tabname) {
}
function extraNetworksControlSortOnClick(event, tabname, extra_networks_tabname) {
- /**
- * Handles `onclick` events for the Sort Mode button.
- *
- * Modifies the data attributes of the Sort Mode button to cycle between
- * various sorting modes.
- *
- * @param event The generated event.
- * @param tabname The name of the active tab in the sd webui. Ex: txt2img, img2img, etc.
- * @param extra_networks_tabname The id of the active extraNetworks tab. Ex: lora, checkpoints, etc.
- */
- var curr_mode = event.currentTarget.dataset.sortmode;
+ /** Handles `onclick` events for Sort Mode buttons. */
- if (curr_mode == "default") {
- event.currentTarget.dataset.sortmode = "name";
- event.currentTarget.setAttribute("title", "Sort by filename");
- } else if (curr_mode == "name") {
- event.currentTarget.dataset.sortmode = "date_created";
- event.currentTarget.setAttribute("title", "Sort by date created");
- } else if (curr_mode == "date_created") {
- event.currentTarget.dataset.sortmode = "date_modified";
- event.currentTarget.setAttribute("title", "Sort by date modified");
- } else {
- event.currentTarget.dataset.sortmode = "default";
- event.currentTarget.setAttribute("title", "Sort by path");
- }
+ var self = event.currentTarget;
+ var parent = event.currentTarget.parentElement;
+
+ parent.querySelectorAll('.extra-network-control--sort').forEach(function(x){
+ x.classList.remove('extra-network-control--enabled');
+ });
+
+ self.classList.add('extra-network-control--enabled');
applyExtraNetworkSort(tabname + "_" + extra_networks_tabname);
}
diff --git a/modules/ui_extra_networks.py b/modules/ui_extra_networks.py
index 9a1cf913f..f4627ce8d 100644
--- a/modules/ui_extra_networks.py
+++ b/modules/ui_extra_networks.py
@@ -569,18 +569,16 @@ class ExtraNetworksPage:
if "user_metadata" not in item:
self.read_user_metadata(item)
- data_sortdir = shared.opts.extra_networks_card_order
- data_sortmode = shared.opts.extra_networks_card_order_field.lower().replace("sort", "").replace(" ", "_").rstrip("_").strip()
- data_sortkey = f"{data_sortmode}-{data_sortdir}-{len(self.items)}"
-
show_tree = shared.opts.extra_networks_tree_view_default_enabled
page_params = {
"tabname": tabname,
"extra_networks_tabname": self.extra_networks_tabname,
- "data_sortmode": data_sortmode,
- "data_sortkey": data_sortkey,
- "data_sortdir": data_sortdir,
+ "data_sortdir": shared.opts.extra_networks_card_order,
+ "sort_path_active": ' extra-network-control--enabled' if shared.opts.extra_networks_card_order_field == 'Path' else '',
+ "sort_name_active": ' extra-network-control--enabled' if shared.opts.extra_networks_card_order_field == 'Name' else '',
+ "sort_date_created_active": ' extra-network-control--enabled' if shared.opts.extra_networks_card_order_field == 'Date Created' else '',
+ "sort_date_modified_active": ' extra-network-control--enabled' if shared.opts.extra_networks_card_order_field == 'Date Modified' else '',
"tree_view_btn_extra_class": "extra-network-control--enabled" if show_tree else "",
"items_html": self.create_card_view_html(tabname, none_message="Loading..." if empty else None),
"extra_networks_tree_view_default_width": shared.opts.extra_networks_tree_view_default_width,
diff --git a/style.css b/style.css
index c2637ec89..29eae4127 100644
--- a/style.css
+++ b/style.css
@@ -1272,7 +1272,7 @@ body.resizing .resize-handle {
.extra-network-control {
position: relative;
- display: grid;
+ display: flex;
width: 100%;
padding: 0 !important;
margin-top: 0 !important;
@@ -1289,6 +1289,12 @@ body.resizing .resize-handle {
align-items: start;
}
+.extra-network-control small{
+ color: var(--input-placeholder-color);
+ line-height: 2.2rem;
+ margin: 0 0.5rem 0 0.75rem;
+}
+
.extra-network-tree .tree-list--tree {}
/* Remove auto indentation from tree. Will be overridden later. */
@@ -1436,6 +1442,12 @@ body.resizing .resize-handle {
line-height: 1rem;
}
+
+.extra-network-control .extra-network-control--search .extra-network-control--search-text::placeholder {
+ color: var(--input-placeholder-color);
+}
+
+
/* clear button (x on right side) styling */
.extra-network-control .extra-network-control--search .extra-network-control--search-text::-webkit-search-cancel-button {
-webkit-appearance: none;
@@ -1468,19 +1480,19 @@ body.resizing .resize-handle {
background-color: var(--input-placeholder-color);
}
-.extra-network-control .extra-network-control--sort[data-sortmode="default"] .extra-network-control--sort-icon {
+.extra-network-control .extra-network-control--sort[data-sortkey="default"] .extra-network-control--sort-icon {
mask-image: url('data:image/svg+xml,');
}
-.extra-network-control .extra-network-control--sort[data-sortmode="name"] .extra-network-control--sort-icon {
+.extra-network-control .extra-network-control--sort[data-sortkey="name"] .extra-network-control--sort-icon {
mask-image: url('data:image/svg+xml,');
}
-.extra-network-control .extra-network-control--sort[data-sortmode="date_created"] .extra-network-control--sort-icon {
+.extra-network-control .extra-network-control--sort[data-sortkey="date_created"] .extra-network-control--sort-icon {
mask-image: url('data:image/svg+xml,');
}
-.extra-network-control .extra-network-control--sort[data-sortmode="date_modified"] .extra-network-control--sort-icon {
+.extra-network-control .extra-network-control--sort[data-sortkey="date_modified"] .extra-network-control--sort-icon {
mask-image: url('data:image/svg+xml,');
}
@@ -1530,13 +1542,18 @@ body.resizing .resize-handle {
}
.extra-network-control .extra-network-control--enabled {
- background-color: rgba(0, 0, 0, 0.15);
+ background-color: rgba(0, 0, 0, 0.1);
+ border-radius: 0.25rem;
}
.dark .extra-network-control .extra-network-control--enabled {
background-color: rgba(255, 255, 255, 0.15);
}
+.extra-network-control .extra-network-control--enabled .extra-network-control--icon{
+ background-color: var(--button-secondary-text-color);
+}
+
/* ==== REFRESH ICON ACTIONS ==== */
.extra-network-control .extra-network-control--refresh {
padding: 0.25rem;