Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
S
Stable Diffusion Webui
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Locked Files
Issues
0
Issues
0
List
Boards
Labels
Service Desk
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Security & Compliance
Security & Compliance
Dependency List
License Compliance
Packages
Packages
List
Container Registry
Analytics
Analytics
CI / CD
Code Review
Insights
Issues
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
novelai-storage
Stable Diffusion Webui
Commits
261972f9
Commit
261972f9
authored
Jan 14, 2024
by
Sj-Si
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
fix search box handling. sort maybe broken not sure. need to bug test and finish cleanup.
parent
02e69633
Changes
3
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
57 additions
and
62 deletions
+57
-62
html/extra-networks-tree-directory.html
html/extra-networks-tree-directory.html
+0
-4
html/extra-networks-tree-file.html
html/extra-networks-tree-file.html
+0
-1
javascript/extraNetworks.js
javascript/extraNetworks.js
+57
-57
No files found.
html/extra-networks-tree-directory.html
deleted
100644 → 0
View file @
02e69633
<details
{
attributes
}
class=
'folder-item'
ontoggle=
'extraNetworksFolderClick(event, "{tabname}_extra_search");'
>
<summary
class=
'folder-item-summary'
>
{folder_name}
</summary>
{content}
</details>
\ No newline at end of file
html/extra-networks-tree-file.html
deleted
100644 → 0
View file @
02e69633
javascript/extraNetworks.js
View file @
261972f9
...
@@ -16,9 +16,6 @@ function toggleCss(key, css, enable) {
...
@@ -16,9 +16,6 @@ function toggleCss(key, css, enable) {
}
}
function
setupExtraNetworksForTab
(
tabname
)
{
function
setupExtraNetworksForTab
(
tabname
)
{
var
this_tab
=
gradioApp
().
querySelector
(
'
#
'
+
tabname
+
'
_extra_tabs
'
);
this_tab
.
classList
.
add
(
'
extra-networks
'
);
function
registerPrompt
(
tabname
,
id
)
{
function
registerPrompt
(
tabname
,
id
)
{
var
textarea
=
gradioApp
().
querySelector
(
"
#
"
+
id
+
"
> label > textarea
"
);
var
textarea
=
gradioApp
().
querySelector
(
"
#
"
+
id
+
"
> label > textarea
"
);
...
@@ -31,22 +28,25 @@ function setupExtraNetworksForTab(tabname) {
...
@@ -31,22 +28,25 @@ function setupExtraNetworksForTab(tabname) {
});
});
}
}
var
this_tab
=
gradioApp
().
querySelector
(
'
#
'
+
tabname
+
'
_extra_tabs
'
);
this_tab
.
classList
.
add
(
'
extra-networks
'
);
this_tab
.
querySelectorAll
(
"
:scope > [id^='
"
+
tabname
+
"
_']
"
).
forEach
(
function
(
elem
)
{
this_tab
.
querySelectorAll
(
"
:scope > [id^='
"
+
tabname
+
"
_']
"
).
forEach
(
function
(
elem
)
{
var
tab_id
=
elem
.
getAttribute
(
"
id
"
);
var
tab_id
=
elem
.
getAttribute
(
"
id
"
);
var
search
=
gradioApp
().
querySelector
(
"
#
"
+
tab_id
+
"
_extra_search
"
);
if
(
!
search
)
{
return
;
// `continue` doesn't work in `forEach` loops. This is equivalent.
}
var
tabs
=
gradioApp
().
querySelector
(
'
#
'
+
tabname
+
'
_extra_tabs > div
'
);
var
tabs
=
gradioApp
().
querySelector
(
'
#
'
+
tabname
+
'
_extra_tabs > div
'
);
var
searchDiv
=
gradioApp
().
QuerySelector
(
"
#
"
+
tab_id
+
"
_extra_search
"
);
console
.
log
(
"
HERE:
"
,
tab_id
+
"
_extra_search
"
,
searchDiv
);
var
search
=
searchDiv
.
value
;
var
sort
=
gradioApp
().
getElementById
(
tabname
+
'
_extra_sort
'
);
var
sort
=
gradioApp
().
getElementById
(
tabname
+
'
_extra_sort
'
);
var
sortOrder
=
gradioApp
().
getElementById
(
tabname
+
'
_extra_sortorder
'
);
var
sortOrder
=
gradioApp
().
getElementById
(
tabname
+
'
_extra_sortorder
'
);
var
refresh
=
gradioApp
().
getElementById
(
tabname
+
'
_extra_refresh
'
);
var
refresh
=
gradioApp
().
getElementById
(
tabname
+
'
_extra_refresh
'
);
var
promptContainer
=
gradioApp
().
querySelector
(
'
.prompt-container-compact#
'
+
tabname
+
'
_prompt_container
'
);
var
promptContainer
=
gradioApp
().
querySelector
(
'
.prompt-container-compact#
'
+
tabname
+
'
_prompt_container
'
);
var
negativePrompt
=
gradioApp
().
querySelector
(
'
#
'
+
tabname
+
'
_neg_prompt
'
);
var
negativePrompt
=
gradioApp
().
querySelector
(
'
#
'
+
tabname
+
'
_neg_prompt
'
);
tabs
.
appendChild
(
searchDiv
);
tabs
.
appendChild
(
sort
);
tabs
.
appendChild
(
sort
);
tabs
.
appendChild
(
sortOrder
);
tabs
.
appendChild
(
sortOrder
);
tabs
.
appendChild
(
refresh
);
tabs
.
appendChild
(
refresh
);
var
applyFilter
=
function
()
{
var
applyFilter
=
function
()
{
var
searchTerm
=
search
.
value
.
toLowerCase
();
var
searchTerm
=
search
.
value
.
toLowerCase
();
...
@@ -113,13 +113,10 @@ function setupExtraNetworksForTab(tabname) {
...
@@ -113,13 +113,10 @@ function setupExtraNetworksForTab(tabname) {
extraNetworksApplySort
[
tab_id
]
=
applySort
;
extraNetworksApplySort
[
tab_id
]
=
applySort
;
extraNetworksApplyFilter
[
tab_id
]
=
applyFilter
;
extraNetworksApplyFilter
[
tab_id
]
=
applyFilter
;
registerPrompt
(
tab_id
,
tab_id
+
"
_prompt
"
);
registerPrompt
(
tab_id
,
tab_id
+
"
_neg_prompt
"
);
});
});
registerPrompt
(
tabname
,
tabname
+
"
_prompt
"
);
registerPrompt
(
tabname
,
tabname
+
"
_neg_prompt
"
);
}
}
function
extraNetworksMovePromptToTab
(
tabname
,
id
,
showPrompt
,
showNegativePrompt
)
{
function
extraNetworksMovePromptToTab
(
tabname
,
id
,
showPrompt
,
showNegativePrompt
)
{
...
@@ -158,12 +155,10 @@ function clearSearch(tabname) {
...
@@ -158,12 +155,10 @@ function clearSearch(tabname) {
function
extraNetworksUnrelatedTabSelected
(
tabname
)
{
// called from python when user selects an unrelated tab (generate)
function
extraNetworksUnrelatedTabSelected
(
tabname
)
{
// called from python when user selects an unrelated tab (generate)
extraNetworksMovePromptToTab
(
tabname
,
''
,
false
,
false
);
extraNetworksMovePromptToTab
(
tabname
,
''
,
false
,
false
);
//clearSearch(tabname);
}
}
function
extraNetworksTabSelected
(
tabname
,
id
,
showPrompt
,
showNegativePrompt
)
{
// called from python when user selects an extra networks tab
function
extraNetworksTabSelected
(
tabname
,
id
,
showPrompt
,
showNegativePrompt
)
{
// called from python when user selects an extra networks tab
extraNetworksMovePromptToTab
(
tabname
,
id
,
showPrompt
,
showNegativePrompt
);
extraNetworksMovePromptToTab
(
tabname
,
id
,
showPrompt
,
showNegativePrompt
);
//clearSearch(tabname);
}
}
function
applyExtraNetworkFilter
(
tabname
)
{
function
applyExtraNetworkFilter
(
tabname
)
{
...
@@ -183,8 +178,6 @@ function setupExtraNetworks() {
...
@@ -183,8 +178,6 @@ function setupExtraNetworks() {
setupExtraNetworksForTab
(
'
img2img
'
);
setupExtraNetworksForTab
(
'
img2img
'
);
}
}
onUiLoaded
(
setupExtraNetworks
);
var
re_extranet
=
/<
([^
:^>
]
+:
[^
:
]
+
)
:
[\d
.
]
+>
(
.*
)
/
;
var
re_extranet
=
/<
([^
:^>
]
+:
[^
:
]
+
)
:
[\d
.
]
+>
(
.*
)
/
;
var
re_extranet_g
=
/<
([^
:^>
]
+:
[^
:
]
+
)
:
[\d
.
]
+>/g
;
var
re_extranet_g
=
/<
([^
:^>
]
+:
[^
:
]
+
)
:
[\d
.
]
+>/g
;
...
@@ -282,7 +275,7 @@ function extraNetworksTreeProcessFileClick(event, btn, tabname, tab_id) {
...
@@ -282,7 +275,7 @@ function extraNetworksTreeProcessFileClick(event, btn, tabname, tab_id) {
var
path
=
par
.
getAttribute
(
"
data-path
"
);
var
path
=
par
.
getAttribute
(
"
data-path
"
);
}
}
function
extraNetworksTreeProcessDirectoryClick
(
event
,
btn
)
{
function
extraNetworksTreeProcessDirectoryClick
(
event
,
btn
,
tabname
,
tab_id
)
{
/**
/**
* Processes `onclick` events when user clicks on directories in tree.
* Processes `onclick` events when user clicks on directories in tree.
*
*
...
@@ -294,6 +287,8 @@ function extraNetworksTreeProcessDirectoryClick(event, btn) {
...
@@ -294,6 +287,8 @@ function extraNetworksTreeProcessDirectoryClick(event, btn) {
*
*
* @param event The generated event.
* @param event The generated event.
* @param btn The clicked `action-list-item` button.
* @param btn The clicked `action-list-item` button.
* @param tabname The name of the active tab in the sd webui. Ex: txt2img, img2img, etc.
* @param tab_id The id of the active extraNetworks tab. Ex: lora, checkpoints, etc.
*/
*/
var
ul
=
btn
.
nextElementSibling
;
var
ul
=
btn
.
nextElementSibling
;
// This is the actual target that the user clicked on within the target button.
// This is the actual target that the user clicked on within the target button.
...
@@ -325,6 +320,14 @@ function extraNetworksTreeProcessDirectoryClick(event, btn) {
...
@@ -325,6 +320,14 @@ function extraNetworksTreeProcessDirectoryClick(event, btn) {
_btn
.
setAttribute
(
"
selected
"
,
""
);
_btn
.
setAttribute
(
"
selected
"
,
""
);
}
}
function
_update_search
(
_tabname
,
_tab_id
,
_search_text
)
{
// Update search input with select button's path.
search_input_elem
=
gradioApp
().
querySelector
(
"
#
"
+
tabname
+
"
_
"
+
tab_id
+
"
_extra_search
"
);
search_input_elem
.
value
=
_search_text
;
updateInput
(
search_input_elem
);
}
// If user clicks on the chevron, then we do not select the folder.
// If user clicks on the chevron, then we do not select the folder.
if
(
true_targ
.
matches
(
"
.action-list-item-action--leading, .action-list-item-action-chevron
"
))
{
if
(
true_targ
.
matches
(
"
.action-list-item-action--leading, .action-list-item-action-chevron
"
))
{
_expand_or_collapse
(
ul
,
btn
);
_expand_or_collapse
(
ul
,
btn
);
...
@@ -334,16 +337,18 @@ function extraNetworksTreeProcessDirectoryClick(event, btn) {
...
@@ -334,16 +337,18 @@ function extraNetworksTreeProcessDirectoryClick(event, btn) {
// If folder is select and open, collapse and deselect button.
// If folder is select and open, collapse and deselect button.
_expand_or_collapse
(
ul
,
btn
);
_expand_or_collapse
(
ul
,
btn
);
btn
.
removeAttribute
(
"
selected
"
);
btn
.
removeAttribute
(
"
selected
"
);
_update_search
(
tabname
,
tab_id
,
""
);
}
else
if
(
!
(
!
btn
.
hasAttribute
(
"
selected
"
)
&&
!
ul
.
hasAttribute
(
"
data-hidden
"
)))
{
}
else
if
(
!
(
!
btn
.
hasAttribute
(
"
selected
"
)
&&
!
ul
.
hasAttribute
(
"
data-hidden
"
)))
{
// If folder is open and not selected, then we don't collapse; just select.
// If folder is open and not selected, then we don't collapse; just select.
// 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
);
_select_button
(
btn
,
tabname
,
tab_id
);
_update_search
(
tabname
,
tab_id
,
btn
.
parentElement
.
getAttribute
(
"
data-path
"
));
}
else
{
}
else
{
// All other cases, just select the button.
// All other cases, just select the button.
_select_button
(
btn
);
_select_button
(
btn
,
tabname
,
tab_id
);
_update_search
(
tabname
,
tab_id
,
btn
.
parentElement
.
getAttribute
(
"
data-path
"
));
}
}
}
}
}
}
...
@@ -363,41 +368,10 @@ function extraNetworksTreeOnClick(event, tabname, tab_id) {
...
@@ -363,41 +368,10 @@ function extraNetworksTreeOnClick(event, tabname, tab_id) {
if
(
par
.
getAttribute
(
"
data-tree-entry-type
"
)
===
"
file
"
)
{
if
(
par
.
getAttribute
(
"
data-tree-entry-type
"
)
===
"
file
"
)
{
extraNetworksTreeProcessFileClick
(
event
,
btn
,
tabname
,
tab_id
);
extraNetworksTreeProcessFileClick
(
event
,
btn
,
tabname
,
tab_id
);
}
else
{
}
else
{
extraNetworksTreeProcessDirectoryClick
(
event
,
btn
);
extraNetworksTreeProcessDirectoryClick
(
event
,
btn
,
tabname
,
tab_id
);
}
}
}
}
function
extraNetworksFolderClick
(
event
,
tabs_id
)
{
// If folder is open but not selected, we don't want to collapse it. Instead
// we override the removal of the "open" attribute so that the folder is
// only selected but remains open. Since this is a toggle event, removing
// the "open" attribute instead forces the event to add it back which keeps it open.
if
(
event
.
target
.
parentElement
.
open
&&
!
event
.
target
.
classList
.
contains
(
"
selected
"
))
{
// before event handler removes "open"
event
.
target
.
parentElement
.
removeAttribute
(
"
open
"
);
}
var
els
=
document
.
querySelectorAll
(
"
.folder-item-summary.selected
"
);
[...
els
].
forEach
(
el
=>
{
el
.
classList
.
remove
(
"
selected
"
);
});
event
.
target
.
classList
.
add
(
"
selected
"
);
var
searchTextArea
=
gradioApp
().
querySelector
(
"
#
"
+
tabs_id
+
'
> label > textarea
'
);
var
text
=
event
.
target
.
classList
.
contains
(
"
search-all
"
)
?
""
:
event
.
target
.
getAttribute
(
"
data-path
"
);
searchTextArea
.
value
=
text
;
updateInput
(
searchTextArea
);
}
function
extraNetworksSearchButton
(
tabs_id
,
event
)
{
var
searchTextarea
=
gradioApp
().
querySelector
(
"
#
"
+
tabs_id
+
'
> label > textarea
'
);
var
button
=
event
.
target
;
var
text
=
button
.
classList
.
contains
(
"
search-all
"
)
?
""
:
button
.
textContent
.
trim
();
searchTextarea
.
value
=
text
;
updateInput
(
searchTextarea
);
}
var
globalPopup
=
null
;
var
globalPopup
=
null
;
var
globalPopupInner
=
null
;
var
globalPopupInner
=
null
;
...
@@ -540,9 +514,35 @@ window.addEventListener("keydown", function(event) {
...
@@ -540,9 +514,35 @@ window.addEventListener("keydown", function(event) {
}
}
});
});
function
testprint
(
e
)
{
/**
console
.
log
(
e
);
* Setup custom loading for this script.
* We need to wait for all of our HTML to be generated in the extra networks tabs
* before we can actually run the `setupExtraNetworks` function.
* The `onUiLoaded` function actually runs before all of our extra network tabs are
* finished generating. Thus we needed this new method.
*
*/
var
uiAfterScriptsCallbacks
=
[]
var
uiAfterScriptsTimeout
=
null
;
var
executedAfterScripts
=
false
;
function
scheduleAfterScriptsCallbacks
()
{
clearTimeout
(
uiAfterScriptsTimeout
);
uiAfterScriptsTimeout
=
setTimeout
(
function
()
{
executeCallbacks
(
uiAfterScriptsCallbacks
);
},
200
);
}
}
const
testinput
=
gradioApp
().
querySelector
(
"
#txt2img_lora_extra_search
"
);
document
.
addEventListener
(
"
DOMContentLoaded
"
,
function
()
{
testinput
.
addEventListener
(
"
input
"
,
testprint
);
var
mutationObserver
=
new
MutationObserver
(
function
(
m
)
{
\ No newline at end of file
if
(
!
executedAfterScripts
&&
gradioApp
().
querySelectorAll
(
"
[id$='_extra_search']
"
).
length
==
8
)
{
executedAfterScripts
=
true
;
scheduleAfterScriptsCallbacks
();
}
});
mutationObserver
.
observe
(
gradioApp
(),
{
childList
:
true
,
subtree
:
true
});
});
uiAfterScriptsCallbacks
.
push
(
setupExtraNetworks
);
\ No newline at end of file
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment