Commit f49c220c authored by Sj-Si's avatar Sj-Si

Move extra network tab buttons into tree view;

parent d88424ef
<div class='card' style={style} onclick={card_clicked} data-name="{name}" {sort_keys}> <div class="card" style={style} onclick="{card_clicked}" data-name="{name}" {sort_keys}>
{background_image} {background_image}
<div class="button-row"> <div class="button-row">{copy_path_button}{metadata_button}{edit_button}</div>
{copy_path_button}
{metadata_button}
{edit_button}
</div>
<div class='actions'> <div class='actions'>
<div class='additional'>{search_terms}</div> <div class='additional'>{search_terms}</div>
<span class='name'>{name}</span> <span class='name'>{name}</span>
......
<div class="copy-path-button card-button"
title="Copy path to clipboard"
onclick="extraNetworksCopyCardPath(event, '{filename}')"
data-clipboard-text="{filename}">
</div>
\ No newline at end of file
<div class="edit-button card-button"
title="Edit metadata"
onclick="extraNetworksEditUserMetadata(event, '{tabname}', '{page_id}', '{name}')">
</div>
\ No newline at end of file
<div class="metadata-button card-button"
title="Show internal metadata"
onclick="extraNetworksRequestMetadata(event, '{page_id}', '{name}')">
</div>
\ No newline at end of file
<span data-filterable-item-text hidden>{search_terms}</span> <span data-filterable-item-text hidden>{search_terms}</span>
<button class="tree-list-content {subclass}" <div class="tree-list-content {subclass}"
expanded="false" expanded="false"
type="button" type="button"
onclick="extraNetworksTreeOnClick(event, '{tabname}', '{tab_id}');{onclick_extra}" onclick="extraNetworksTreeOnClick(event, '{tabname}', '{tab_id}');{onclick_extra}"
data-path="{data_path}"
data-hash="{data_hash}"
> >
<span class='tree-list-item-action tree-list-item-action--leading'> <span class='tree-list-item-action tree-list-item-action--leading'>
{action_list_item_action_leading} {action_list_item_action_leading}
...@@ -19,4 +21,4 @@ ...@@ -19,4 +21,4 @@
<span class="tree-list-item-action tree-list-item-action--trailing"> <span class="tree-list-item-action tree-list-item-action--trailing">
{action_list_item_action_trailing} {action_list_item_action_trailing}
</span> </span>
</button> </div>
\ No newline at end of file \ No newline at end of file
<div class="tree-list">
<div class="tree-list-controls">
<div class="tree-list-search">
<input
id="{tabname}_{tab_id}_extra_search"
class="tree-list-search-text"
type="search"
placeholder="Filter files"
>
</div>
<div
id="{tabname}_{tab_id}_extra_sort"
class="tree-list-sort"
data-sortmode="path"
data-sortkey="sortPath-Ascending-640"
title="Sort by path"
onclick="extraNetworksTreeSortOnClick(event, '{tabname}', '{tab_id}');"
>
<i class="tree-list-sort-icon"></i>
</div>
<div
id="{tabname}_{tab_id}_extra_sort_dir"
class="tree-list-sort-dir"
data-sortdir="Ascending"
title="Sort ascending"
onclick="extraNetworksTreeSortDirOnClick(event, '{tabname}', '{tab_id}');"
>
<i class="tree-list-sort-dir-icon"></i>
</div>
<div
id="{tabname}_{tab_id}_extra_refresh"
class="tree-list-refresh"
title="Refresh page"
onclick="extraNetworksTreeRefreshOnClick(event, '{tabname}', '{tab_id}');"
>
<i class="tree-list-refresh-icon"></i>
</div>
</div>
<div class="tree-list-container">
{tree}
</div>
</div>
\ No newline at end of file
...@@ -37,15 +37,20 @@ function setupExtraNetworksForTab(tabname) { ...@@ -37,15 +37,20 @@ function setupExtraNetworksForTab(tabname) {
return; // `continue` doesn't work in `forEach` loops. This is equivalent. return; // `continue` doesn't work in `forEach` loops. This is equivalent.
} }
var tabs = gradioApp().querySelector('#' + tabname + '_extra_tabs > div'); var sort = gradioApp().querySelector("#" + tab_id + "_extra_sort");
var sort = gradioApp().getElementById(tabname + '_extra_sort'); if (!sort) {
var sortOrder = gradioApp().getElementById(tabname + '_extra_sortorder'); return; // `continue` doesn't work in `forEach` loops. This is equivalent.
var refresh = gradioApp().getElementById(tabname + '_extra_refresh'); }
var promptContainer = gradioApp().querySelector('.prompt-container-compact#' + tabname + '_prompt_container');
var negativePrompt = gradioApp().querySelector('#' + tabname + '_neg_prompt'); var sort_dir = gradioApp().querySelector("#" + tab_id + "_extra_sort_dir");
tabs.appendChild(sort); if (!sort_dir) {
tabs.appendChild(sortOrder); return; // `continue` doesn't work in `forEach` loops. This is equivalent.
tabs.appendChild(refresh); }
var refresh = gradioApp().querySelector("#" + tab_id + "_extra_refresh");
if (!refresh) {
return; // `continue` doesn't work in `forEach` loops. This is equivalent.
}
var applyFilter = function() { var applyFilter = function() {
var searchTerm = search.value.toLowerCase(); var searchTerm = search.value.toLowerCase();
...@@ -72,8 +77,8 @@ function setupExtraNetworksForTab(tabname) { ...@@ -72,8 +77,8 @@ function setupExtraNetworksForTab(tabname) {
var applySort = function() { var applySort = function() {
var cards = gradioApp().querySelectorAll('#' + tabname + '_extra_tabs div.card'); var cards = gradioApp().querySelectorAll('#' + tabname + '_extra_tabs div.card');
var reverse = sortOrder.classList.contains("sortReverse"); var reverse = sort_dir.dataset.sortdir == "Descending";
var sortKey = sort.querySelector("input").value.toLowerCase().replace("sort", "").replaceAll(" ", "_").replace(/_+$/, "").trim() || "name"; var sortKey = sort.dataset.sortmode.toLowerCase().replace("sort", "").replaceAll(" ", "_").replace(/_+$/, "").trim() || "name";
sortKey = "sort" + sortKey.charAt(0).toUpperCase() + sortKey.slice(1); sortKey = "sort" + sortKey.charAt(0).toUpperCase() + sortKey.slice(1);
var sortKeyStore = sortKey + "-" + (reverse ? "Descending" : "Ascending") + "-" + cards.length; var sortKeyStore = sortKey + "-" + (reverse ? "Descending" : "Ascending") + "-" + cards.length;
...@@ -107,10 +112,7 @@ function setupExtraNetworksForTab(tabname) { ...@@ -107,10 +112,7 @@ function setupExtraNetworksForTab(tabname) {
}; };
search.addEventListener("input", applyFilter); search.addEventListener("input", applyFilter);
sortOrder.addEventListener("click", function() { applySort();
sortOrder.classList.toggle("sortReverse");
applySort();
});
applyFilter(); applyFilter();
extraNetworksApplySort[tab_id] = applySort; extraNetworksApplySort[tab_id] = applySort;
...@@ -274,7 +276,7 @@ function extraNetworksTreeProcessFileClick(event, btn, tabname, tab_id) { ...@@ -274,7 +276,7 @@ function extraNetworksTreeProcessFileClick(event, btn, tabname, tab_id) {
var par = btn.parentElement; var par = btn.parentElement;
var search_id = tabname + "_" + tab_id + "_extra_search"; var search_id = tabname + "_" + tab_id + "_extra_search";
var type = par.getAttribute("data-tree-entry-type"); var type = par.getAttribute("data-tree-entry-type");
var path = par.getAttribute("data-path"); var path = btn.getAttribute("data-path");
} }
function extraNetworksTreeProcessDirectoryClick(event, btn, tabname, tab_id) { function extraNetworksTreeProcessDirectoryClick(event, btn, tabname, tab_id) {
...@@ -310,7 +312,7 @@ function extraNetworksTreeProcessDirectoryClick(event, btn, tabname, tab_id) { ...@@ -310,7 +312,7 @@ function extraNetworksTreeProcessDirectoryClick(event, btn, tabname, tab_id) {
function _remove_selected_from_all() { function _remove_selected_from_all() {
// Removes the `selected` attribute from all buttons. // Removes the `selected` attribute from all buttons.
var sels = document.querySelectorAll("button.tree-list-content"); var sels = document.querySelectorAll("div.tree-list-content");
[...sels].forEach(el => { [...sels].forEach(el => {
el.removeAttribute("selected"); el.removeAttribute("selected");
}); });
...@@ -345,11 +347,11 @@ function extraNetworksTreeProcessDirectoryClick(event, btn, tabname, tab_id) { ...@@ -345,11 +347,11 @@ function extraNetworksTreeProcessDirectoryClick(event, btn, tabname, tab_id) {
// NOTE: Double inversion sucks but it is the clearest way to show the branching here. // NOTE: Double inversion sucks but it is the clearest way to show the branching here.
_expand_or_collapse(ul, btn); _expand_or_collapse(ul, btn);
_select_button(btn, tabname, tab_id); _select_button(btn, tabname, tab_id);
_update_search(tabname, tab_id, btn.parentElement.getAttribute("data-path")); _update_search(tabname, tab_id, btn.getAttribute("data-path"));
} else { } else {
// All other cases, just select the button. // All other cases, just select the button.
_select_button(btn, tabname, tab_id); _select_button(btn, tabname, tab_id);
_update_search(tabname, tab_id, btn.parentElement.getAttribute("data-path")); _update_search(tabname, tab_id, btn.getAttribute("data-path"));
} }
} }
} }
...@@ -374,6 +376,48 @@ function extraNetworksTreeOnClick(event, tabname, tab_id) { ...@@ -374,6 +376,48 @@ function extraNetworksTreeOnClick(event, tabname, tab_id) {
} }
} }
function extraNetworksTreeSortOnClick(event, tabname, tab_id) {
var curr_mode = event.currentTarget.dataset.sortmode;
var el_sort_dir = gradioApp().querySelector("#" + tabname + "_" + tab_id + "_extra_sort_dir");
var sort_dir = el_sort_dir.dataset.sortdir;
if (curr_mode == "path") {
event.currentTarget.dataset.sortmode = "name";
event.currentTarget.dataset.sortkey = "sortName-" + sort_dir + "-640";
event.currentTarget.setAttribute("title", "Sort by filename");
} else if (curr_mode == "name") {
event.currentTarget.dataset.sortmode = "date_created";
event.currentTarget.dataset.sortkey = "sortDate_created-" + sort_dir + "-640";
event.currentTarget.setAttribute("title", "Sort by date created");
} else if (curr_mode == "date_created") {
event.currentTarget.dataset.sortmode = "date_modified";
event.currentTarget.dataset.sortkey = "sortDate_modified-" + sort_dir + "-640";
event.currentTarget.setAttribute("title", "Sort by date modified");
} else {
event.currentTarget.dataset.sortmode = "path";
event.currentTarget.dataset.sortkey = "sortPath-" + sort_dir + "-640";
event.currentTarget.setAttribute("title", "Sort by path");
}
applyExtraNetworkSort(tabname + "_" + tab_id);
}
function extraNetworksTreeSortDirOnClick(event, tabname, tab_id) {
var curr_dir = event.currentTarget.getAttribute("data-sortdir");
if (curr_dir == "Ascending") {
event.currentTarget.dataset.sortdir = "Descending";
event.currentTarget.setAttribute("title", "Sort descending");
} else {
event.currentTarget.dataset.sortdir = "Ascending";
event.currentTarget.setAttribute("title", "Sort ascending");
}
applyExtraNetworkSort(tabname + "_" + tab_id);
}
function extraNetworksTreeRefreshOnClick(event, tabname, tab_id) {
console.log("refresh clicked");
var btn_refresh_internal = gradioApp().getElementById(tabname + "_extra_refresh_internal");
btn_refresh_internal.dispatchEvent(new Event("click"));
}
var globalPopup = null; var globalPopup = null;
var globalPopupInner = null; var globalPopupInner = null;
......
This diff is collapsed.
This diff is collapsed.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment