From 9489a1989a473436a8c0caa8a0db58636b73e4a8 Mon Sep 17 00:00:00 2001 From: Will Miao <13051207myq@gmail.com> Date: Tue, 4 Feb 2025 12:20:56 +0800 Subject: [PATCH] Refactor LoRA template with modular components and script updates --- static/js/api/loraApi.js | 238 +++++++++++++++++++++++++++ static/js/components/LoraCard.js | 210 +++++++++++++++++++++++ static/js/main.js | 66 ++++++++ static/js/managers/LoadingManager.js | 57 +++++++ static/js/managers/ModalManager.js | 91 ++++++++++ static/js/state/index.js | 9 + static/js/utils/debounce.js | 8 + static/js/utils/infiniteScroll.js | 29 ++++ static/js/utils/modalUtils.js | 56 +++++++ static/js/utils/uiHelpers.js | 88 ++++++++++ templates/components/controls.html | 16 ++ templates/components/loading.html | 9 + templates/components/modals.html | 15 ++ templates/loras.html | 51 +----- 14 files changed, 898 insertions(+), 45 deletions(-) create mode 100644 static/js/api/loraApi.js create mode 100644 static/js/components/LoraCard.js create mode 100644 static/js/main.js create mode 100644 static/js/managers/LoadingManager.js create mode 100644 static/js/managers/ModalManager.js create mode 100644 static/js/state/index.js create mode 100644 static/js/utils/debounce.js create mode 100644 static/js/utils/infiniteScroll.js create mode 100644 static/js/utils/modalUtils.js create mode 100644 static/js/utils/uiHelpers.js create mode 100644 templates/components/controls.html create mode 100644 templates/components/loading.html create mode 100644 templates/components/modals.html diff --git a/static/js/api/loraApi.js b/static/js/api/loraApi.js new file mode 100644 index 00000000..3dae5e81 --- /dev/null +++ b/static/js/api/loraApi.js @@ -0,0 +1,238 @@ +import { state } from '../state/index.js'; +import { showToast } from '../utils/uiHelpers.js'; +import { createLoraCard } from '../components/LoraCard.js'; +import { initializeInfiniteScroll } from '../utils/infiniteScroll.js'; +import { showDeleteModal } from '../utils/modalUtils.js'; + +export async function loadMoreLoras() { + if (state.isLoading || !state.hasMore) return; + + state.isLoading = true; + try { + const params = new URLSearchParams({ + page: state.currentPage, + page_size: 20, + sort_by: state.sortBy + }); + + if (state.activeFolder !== null) { + params.append('folder', state.activeFolder); + } + + console.log('Loading loras with params:', params.toString()); + + const response = await fetch(`/api/loras?${params}`); + if (!response.ok) { + throw new Error(`Failed to fetch loras: ${response.statusText}`); + } + + const data = await response.json(); + console.log('Received data:', data); + + if (data.items.length === 0 && state.currentPage === 1) { + const grid = document.getElementById('loraGrid'); + grid.innerHTML = '