for forge
parent
302ba65cc4
commit
c66dfa2330
|
|
@ -11,17 +11,32 @@ function ch_img_node_str(path){
|
|||
return `<img src='${ch_convert_file_path_to_url(path)}' style="width:24px"/>`;
|
||||
}
|
||||
|
||||
function ch_sd_version(){
|
||||
export function ch_sd_version() {
|
||||
let foot = gradioApp().getElementById("footer");
|
||||
if (!foot){return null;}
|
||||
if (!foot) {
|
||||
return null;
|
||||
}
|
||||
|
||||
let versions = foot.querySelector(".versions");
|
||||
if (!versions){return null;}
|
||||
if (!versions) {
|
||||
return null;
|
||||
}
|
||||
|
||||
let links = versions.getElementsByTagName("a");
|
||||
if (links == null || links.length == 0){return null;}
|
||||
let [webui_version] = versions.getElementsByTagName("a");
|
||||
if (!webui_version) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return links[0].innerHTML.substring(1);
|
||||
return extract_version(webui_version.innerHTML);
|
||||
}
|
||||
|
||||
function extract_version(text) {
|
||||
const matches = text.match(/v[0-9]\.[0-9]\.[0-9]/);
|
||||
if (matches === null || matches.length == 0) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return matches[0].substring(1);
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -185,7 +200,7 @@ function convertModelTypeFromJsToPy(js_model_type) {
|
|||
async function open_model_url(event, model_type, search_term){
|
||||
console.log("start open_model_url");
|
||||
|
||||
//get hidden components of extension
|
||||
//get hidden components of extension
|
||||
let js_open_url_btn = gradioApp().getElementById("ch_js_open_url_btn");
|
||||
if (!js_open_url_btn) {
|
||||
return
|
||||
|
|
@ -215,11 +230,11 @@ async function open_model_url(event, model_type, search_term){
|
|||
let new_py_msg = "";
|
||||
try {
|
||||
new_py_msg = await get_new_ch_py_msg();
|
||||
|
||||
|
||||
} catch (error) {
|
||||
console.log(error);
|
||||
console.log(error);
|
||||
}
|
||||
|
||||
|
||||
console.log("new_py_msg:");
|
||||
console.log(new_py_msg);
|
||||
|
||||
|
|
@ -237,7 +252,7 @@ async function open_model_url(event, model_type, search_term){
|
|||
|
||||
}
|
||||
|
||||
|
||||
|
||||
console.log("end open_model_url");
|
||||
|
||||
}
|
||||
|
|
@ -245,7 +260,7 @@ async function open_model_url(event, model_type, search_term){
|
|||
function add_trigger_words(event, model_type, search_term){
|
||||
console.log("start add_trigger_words");
|
||||
|
||||
//get hidden components of extension
|
||||
//get hidden components of extension
|
||||
let js_add_trigger_words_btn = gradioApp().getElementById("ch_js_add_trigger_words_btn");
|
||||
if (!js_add_trigger_words_btn) {
|
||||
return
|
||||
|
|
@ -277,13 +292,13 @@ function add_trigger_words(event, model_type, search_term){
|
|||
event.stopPropagation()
|
||||
event.preventDefault()
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
function use_preview_prompt(event, model_type, search_term){
|
||||
console.log("start use_preview_prompt");
|
||||
|
||||
//get hidden components of extension
|
||||
//get hidden components of extension
|
||||
let js_use_preview_prompt_btn = gradioApp().getElementById("ch_js_use_preview_prompt_btn");
|
||||
if (!js_use_preview_prompt_btn) {
|
||||
return
|
||||
|
|
@ -323,7 +338,7 @@ function use_preview_prompt(event, model_type, search_term){
|
|||
async function remove_card(event, model_type, search_term){
|
||||
console.log("start remove_card");
|
||||
|
||||
//get hidden components of extension
|
||||
//get hidden components of extension
|
||||
let js_remove_card_btn = gradioApp().getElementById("ch_js_remove_card_btn");
|
||||
if (!js_remove_card_btn) {
|
||||
return
|
||||
|
|
@ -363,7 +378,7 @@ async function remove_card(event, model_type, search_term){
|
|||
console.log(error);
|
||||
new_py_msg = error;
|
||||
}
|
||||
|
||||
|
||||
console.log("new_py_msg:");
|
||||
console.log(new_py_msg);
|
||||
|
||||
|
|
@ -392,7 +407,7 @@ async function remove_card(event, model_type, search_term){
|
|||
if (sd_version >= "1.8.0") {
|
||||
let js_model_type = convertModelTypeFromPyToJS(model_type);
|
||||
if (!js_model_type){return;}
|
||||
|
||||
|
||||
refresh_btn_id = active_tab + "_" + js_model_type + "_extra_refresh";
|
||||
refresh_btn = gradioApp().getElementById(refresh_btn_id);
|
||||
} else {
|
||||
|
|
@ -407,7 +422,7 @@ async function remove_card(event, model_type, search_term){
|
|||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
console.log("end remove_card");
|
||||
|
||||
|
||||
|
|
@ -418,7 +433,7 @@ async function remove_card(event, model_type, search_term){
|
|||
async function open_model_url_with_path(event, model_type, model_path){
|
||||
console.log("start open_model_url");
|
||||
|
||||
//get hidden components of extension
|
||||
//get hidden components of extension
|
||||
let js_open_url_btn = gradioApp().getElementById("ch_js_open_url_btn");
|
||||
if (!js_open_url_btn) {
|
||||
return
|
||||
|
|
@ -448,11 +463,11 @@ async function open_model_url_with_path(event, model_type, model_path){
|
|||
let new_py_msg = "";
|
||||
try {
|
||||
new_py_msg = await get_new_ch_py_msg();
|
||||
|
||||
|
||||
} catch (error) {
|
||||
console.log(error);
|
||||
console.log(error);
|
||||
}
|
||||
|
||||
|
||||
console.log("new_py_msg:");
|
||||
console.log(new_py_msg);
|
||||
|
||||
|
|
@ -470,7 +485,7 @@ async function open_model_url_with_path(event, model_type, model_path){
|
|||
|
||||
}
|
||||
|
||||
|
||||
|
||||
console.log("end open_model_url");
|
||||
|
||||
}
|
||||
|
|
@ -478,7 +493,7 @@ async function open_model_url_with_path(event, model_type, model_path){
|
|||
function add_trigger_words_with_path(event, model_type, model_path){
|
||||
console.log("start add_trigger_words");
|
||||
|
||||
//get hidden components of extension
|
||||
//get hidden components of extension
|
||||
let js_add_trigger_words_btn = gradioApp().getElementById("ch_js_add_trigger_words_btn");
|
||||
if (!js_add_trigger_words_btn) {
|
||||
return
|
||||
|
|
@ -510,13 +525,13 @@ function add_trigger_words_with_path(event, model_type, model_path){
|
|||
event.stopPropagation()
|
||||
event.preventDefault()
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
function use_preview_prompt_with_path(event, model_type, model_path){
|
||||
console.log("start use_preview_prompt");
|
||||
|
||||
//get hidden components of extension
|
||||
//get hidden components of extension
|
||||
let js_use_preview_prompt_btn = gradioApp().getElementById("ch_js_use_preview_prompt_btn");
|
||||
if (!js_use_preview_prompt_btn) {
|
||||
return
|
||||
|
|
@ -556,7 +571,7 @@ function use_preview_prompt_with_path(event, model_type, model_path){
|
|||
async function remove_card_with_path(event, model_type, model_path){
|
||||
console.log("start remove_card");
|
||||
|
||||
//get hidden components of extension
|
||||
//get hidden components of extension
|
||||
let js_remove_card_btn = gradioApp().getElementById("ch_js_remove_card_btn");
|
||||
if (!js_remove_card_btn) {
|
||||
return
|
||||
|
|
@ -596,7 +611,7 @@ async function remove_card_with_path(event, model_type, model_path){
|
|||
console.log(error);
|
||||
new_py_msg = error;
|
||||
}
|
||||
|
||||
|
||||
console.log("new_py_msg:");
|
||||
console.log(new_py_msg);
|
||||
|
||||
|
|
@ -628,7 +643,7 @@ async function remove_card_with_path(event, model_type, model_path){
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
console.log("end remove_card");
|
||||
|
||||
|
||||
|
|
@ -645,7 +660,7 @@ function ch_dl_model_new_version(event, model_path, version_id, download_url){
|
|||
return
|
||||
}
|
||||
|
||||
//get hidden components of extension
|
||||
//get hidden components of extension
|
||||
let js_dl_model_new_version_btn = gradioApp().getElementById("ch_js_dl_model_new_version_btn");
|
||||
if (!js_dl_model_new_version_btn) {
|
||||
return
|
||||
|
|
@ -673,6 +688,29 @@ function ch_dl_model_new_version(event, model_path, version_id, download_url){
|
|||
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {string} version1 - version1 (x.y.z)
|
||||
* @param {string} version2 - version2 (x.y.z)
|
||||
* @returns {number} - 1: version1 is higher, -1: version2 is higher, 0: same version
|
||||
*/
|
||||
function compareVersions(version1, version2) {
|
||||
const v1Parts = version1.split('.').map(Number);
|
||||
const v2Parts = version2.split('.').map(Number);
|
||||
|
||||
for (let i = 0; i < Math.max(v1Parts.length, v2Parts.length); i++) {
|
||||
const v1Part = v1Parts[i] || 0;
|
||||
const v2Part = v2Parts[i] || 0;
|
||||
|
||||
if (v1Part > v2Part) {
|
||||
return 1;
|
||||
} else if (v1Part < v2Part) {
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
return 0; // same version
|
||||
}
|
||||
|
||||
|
||||
onUiLoaded(() => {
|
||||
|
||||
|
|
@ -736,7 +774,7 @@ onUiLoaded(() => {
|
|||
.find(el => el.closest('.tabitem').style.display === 'block')
|
||||
?.id.match(/^(txt2img|img2img)_(.+)_cards$/)[2]
|
||||
|
||||
|
||||
|
||||
console.log("found active tab: " + active_extra_tab);
|
||||
|
||||
switch (active_extra_tab) {
|
||||
|
|
@ -797,7 +835,7 @@ onUiLoaded(() => {
|
|||
for (let card of cards) {
|
||||
//get button row
|
||||
button_row = card.querySelector(".button-row");
|
||||
|
||||
|
||||
if (!button_row){
|
||||
console.log("can not find button_row");
|
||||
continue;
|
||||
|
|
@ -877,7 +915,7 @@ onUiLoaded(() => {
|
|||
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -941,11 +979,11 @@ onUiLoaded(() => {
|
|||
|
||||
|
||||
//find out current selected model type tab
|
||||
|
||||
|
||||
extra_tabs = gradioApp().getElementById(tab_prefix+"_extra_tabs");
|
||||
if (!extra_tabs) {console.log("can not find extra_tabs: " + tab_prefix+"_extra_tabs");}
|
||||
|
||||
//get tab by id
|
||||
//get tab by id
|
||||
for (const js_model_type of model_type_list) {
|
||||
//get tab
|
||||
let extra_tab = gradioApp().getElementById(tab_prefix+"_"+js_model_type);
|
||||
|
|
@ -1010,7 +1048,7 @@ onUiLoaded(() => {
|
|||
|
||||
//set button_row's flex-wrap to wrap
|
||||
button_row.style.flexWrap = "wrap";
|
||||
|
||||
|
||||
if (!button_row){
|
||||
console.log("can not find button_row");
|
||||
continue;
|
||||
|
|
@ -1095,7 +1133,7 @@ onUiLoaded(() => {
|
|||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
|
@ -1117,7 +1155,7 @@ onUiLoaded(() => {
|
|||
//from sd version 1.8.0, extra network's toolbar is fully rewrited. This extension need to re-write this part too.
|
||||
let sd_version = ch_sd_version();
|
||||
console.log(`sd version is: ${sd_version}`);
|
||||
if (sd_version >= "1.8.0"){
|
||||
if (compareVersions(sd_version, "1.8.0") >= 0){
|
||||
|
||||
for (let prefix of tab_prefix_list) {
|
||||
toolbar_id = prefix + "_lora_controls";
|
||||
|
|
@ -1140,7 +1178,7 @@ onUiLoaded(() => {
|
|||
continue;
|
||||
}
|
||||
|
||||
|
||||
|
||||
// from sd v1.8.0, we add refresh function to official's refresh button
|
||||
refresh_btn.onclick = function(event){
|
||||
console.log("run refresh button on click");
|
||||
|
|
@ -1164,17 +1202,17 @@ onUiLoaded(() => {
|
|||
for (let prefix of tab_prefix_list) {
|
||||
tab_id = prefix + "_extra_tabs";
|
||||
extra_tab = gradioApp().getElementById(tab_id);
|
||||
|
||||
|
||||
//get toolbar
|
||||
//get Refresh button
|
||||
extra_network_refresh_btn = gradioApp().getElementById(prefix+"_extra_refresh");
|
||||
|
||||
|
||||
|
||||
|
||||
if (!extra_network_refresh_btn){
|
||||
console.log("can not get extra network refresh button for " + tab_id);
|
||||
continue;
|
||||
}
|
||||
|
||||
|
||||
// add refresh button to toolbar
|
||||
let ch_refresh = document.createElement("button");
|
||||
ch_refresh.innerHTML = "🔁";
|
||||
|
|
@ -1182,9 +1220,9 @@ onUiLoaded(() => {
|
|||
ch_refresh.className = "lg secondary gradio-button";
|
||||
ch_refresh.style.fontSize = "200%";
|
||||
ch_refresh.onclick = update_card_for_civitai;
|
||||
|
||||
|
||||
extra_network_refresh_btn.parentNode.appendChild(ch_refresh);
|
||||
|
||||
|
||||
}
|
||||
|
||||
//run it once
|
||||
|
|
@ -1194,11 +1232,8 @@ onUiLoaded(() => {
|
|||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
});
|
||||
|
||||
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue