File size: 5,091 Bytes
03d9a71 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 |
import { ActionIcon, DraggablePanelBody, DraggablePanelFooter } from '@lobehub/ui';
import { useTimeout } from 'ahooks';
import { Skeleton, Slider } from 'antd';
import isEqual from 'fast-deep-equal';
import { ZoomIn, ZoomOut } from 'lucide-react';
import { memo, useEffect, useRef, useState } from 'react';
import { shallow } from 'zustand/shallow';
import { useStyles } from '@/pages/ExtraNetworkSidebar/style';
import civitaiHelperFix from '@/script/civitaiHelperFix';
import { selectors, useAppStore } from '@/store';
const Inner = memo(() => {
const txt2imgExtraNetworkSidebarReference = useRef<HTMLDivElement>(null);
const img2imgExtraNetworkSidebarReference = useRef<HTMLDivElement>(null);
const [extraLoading, setExtraLoading] = useState(true);
const setting = useAppStore(selectors.currentSetting, isEqual);
const currentTab = useAppStore(selectors.currentTab, shallow);
const [size, setSize] = useState<number>(setting.extraNetworkCardSize || 86);
const { styles } = useStyles({ size });
useEffect(() => {
console.time('🤯 [layout] inject - ExtraNetworkSidebar');
if (setting.enableExtraNetworkSidebar) {
const image2imageExtraNetworkButton = gradioApp().querySelectorAll(
'#txt2img_extra_tabs > .tab-nav > button',
)[1] as HTMLButtonElement;
const text2imageExtraNetworkButton = gradioApp().querySelectorAll(
'#img2img_extra_tabs > .tab-nav > button',
)[1] as HTMLButtonElement;
if (image2imageExtraNetworkButton) {
image2imageExtraNetworkButton.click();
}
if (text2imageExtraNetworkButton) {
text2imageExtraNetworkButton.click();
}
const txt2imgTab = gradioApp().querySelector('div#tab_txt2img') as HTMLDivElement;
const txt2imgExtraNetworks = gradioApp().querySelector(
'div#txt2img_extra_tabs',
) as HTMLDivElement;
const txt2imgRender = txt2imgExtraNetworks.querySelectorAll(
'div.tabitem.gradio-tabitem',
)[0] as HTMLDivElement;
const img2imgTab = gradioApp().querySelector('div#tab_img2img');
const img2imgExtraNetworks = gradioApp().querySelector(
'div#img2img_extra_tabs',
) as HTMLDivElement;
const img2imgRender = img2imgExtraNetworks.querySelectorAll(
'div.tabitem.gradio-tabitem',
)[0] as HTMLDivElement;
if (txt2imgExtraNetworks && img2imgExtraNetworks) {
txt2imgExtraNetworkSidebarReference.current?.append(txt2imgExtraNetworks);
txt2imgRender.id = 'txt2img_render';
txt2imgTab?.append(txt2imgRender);
img2imgExtraNetworkSidebarReference.current?.append(img2imgExtraNetworks);
img2imgRender.id = 'img2img_render';
img2imgTab?.append(img2imgRender);
}
if (document.querySelector('.extra-network-cards')) {
civitaiHelperFix();
setExtraLoading(false);
return;
}
}
console.timeEnd('🤯 [layout] inject - ExtraNetworkSidebar');
}, []);
useTimeout(() => {
console.time('🤯 [extranetwork] force reload');
const t2indexButton = document.querySelector('#txt2img_extra_refresh') as HTMLButtonElement;
const index2indexButton = document.querySelector('#img2img_extra_refresh') as HTMLButtonElement;
t2indexButton.click();
index2indexButton.click();
setExtraLoading(false);
try {
const civitaiText2ImgButton = document.querySelector('#txt2img_extra_refresh')
?.nextSibling as HTMLButtonElement;
if (civitaiText2ImgButton) {
civitaiText2ImgButton.onclick = civitaiHelperFix;
}
const civitaiImg2ImgButton = document.querySelector('#img2img_extra_refresh')
?.nextSibling as HTMLButtonElement;
if (civitaiImg2ImgButton) {
civitaiImg2ImgButton.onclick = civitaiHelperFix;
}
civitaiHelperFix();
} catch (error) {
console.debug(error);
}
console.timeEnd('🤯 [extranetwork] force reload');
}, 2000);
return (
<>
<DraggablePanelBody className={styles.body}>
{extraLoading && <Skeleton active />}
<div style={extraLoading ? { display: 'none' } : {}}>
<div
id="txt2img-extra-network-sidebar"
ref={txt2imgExtraNetworkSidebarReference}
style={currentTab === 'tab_img2img' ? { display: 'none' } : {}}
/>
<div
id="img2img-extra-network-sidebar"
ref={img2imgExtraNetworkSidebarReference}
style={currentTab === 'tab_img2img' ? {} : { display: 'none' }}
/>
</div>
</DraggablePanelBody>
<DraggablePanelFooter>
<ActionIcon
icon={setting.extraNetworkCardSize < size ? ZoomOut : ZoomIn}
onClick={() => setSize(setting.extraNetworkCardSize)}
size={{ blockSize: 24, fontSize: 16 }}
/>
<Slider
defaultValue={size}
max={256}
min={64}
onChange={setSize}
step={8}
style={{ flex: 1 }}
value={size}
/>
</DraggablePanelFooter>
</>
);
});
export default Inner;
|