mirror of
https://github.com/willmiao/ComfyUI-Lora-Manager.git
synced 2026-03-22 05:32:12 -03:00
111 lines
4.2 KiB
JavaScript
111 lines
4.2 KiB
JavaScript
import { BaseContextMenu } from './BaseContextMenu.js';
|
|
import { state } from '../../state/index.js';
|
|
import { bulkManager } from '../../managers/BulkManager.js';
|
|
import { updateElementText } from '../../utils/i18nHelpers.js';
|
|
|
|
export class BulkContextMenu extends BaseContextMenu {
|
|
constructor() {
|
|
super('bulkContextMenu', '.model-card.selected');
|
|
this.setupBulkMenuItems();
|
|
}
|
|
|
|
setupBulkMenuItems() {
|
|
if (!this.menu) return;
|
|
|
|
// Update menu items visibility based on current model type
|
|
this.updateMenuItemsForModelType();
|
|
|
|
// Update selected count in header
|
|
this.updateSelectedCountHeader();
|
|
}
|
|
|
|
updateMenuItemsForModelType() {
|
|
const currentModelType = state.currentPageType;
|
|
const config = bulkManager.actionConfig[currentModelType];
|
|
|
|
if (!config) return;
|
|
|
|
// Update button visibility based on model type
|
|
const addTagsItem = this.menu.querySelector('[data-action="add-tags"]');
|
|
const setBaseModelItem = this.menu.querySelector('[data-action="set-base-model"]');
|
|
const sendToWorkflowAppendItem = this.menu.querySelector('[data-action="send-to-workflow-append"]');
|
|
const sendToWorkflowReplaceItem = this.menu.querySelector('[data-action="send-to-workflow-replace"]');
|
|
const copyAllItem = this.menu.querySelector('[data-action="copy-all"]');
|
|
const refreshAllItem = this.menu.querySelector('[data-action="refresh-all"]');
|
|
const moveAllItem = this.menu.querySelector('[data-action="move-all"]');
|
|
const deleteAllItem = this.menu.querySelector('[data-action="delete-all"]');
|
|
|
|
if (sendToWorkflowAppendItem) {
|
|
sendToWorkflowAppendItem.style.display = config.sendToWorkflow ? 'flex' : 'none';
|
|
}
|
|
if (sendToWorkflowReplaceItem) {
|
|
sendToWorkflowReplaceItem.style.display = config.sendToWorkflow ? 'flex' : 'none';
|
|
}
|
|
if (copyAllItem) {
|
|
copyAllItem.style.display = config.copyAll ? 'flex' : 'none';
|
|
}
|
|
if (refreshAllItem) {
|
|
refreshAllItem.style.display = config.refreshAll ? 'flex' : 'none';
|
|
}
|
|
if (moveAllItem) {
|
|
moveAllItem.style.display = config.moveAll ? 'flex' : 'none';
|
|
}
|
|
if (deleteAllItem) {
|
|
deleteAllItem.style.display = config.deleteAll ? 'flex' : 'none';
|
|
}
|
|
if (addTagsItem) {
|
|
addTagsItem.style.display = config.addTags ? 'flex' : 'none';
|
|
}
|
|
if (setBaseModelItem) {
|
|
setBaseModelItem.style.display = 'flex'; // Base model editing is available for all model types
|
|
}
|
|
}
|
|
|
|
updateSelectedCountHeader() {
|
|
const headerElement = this.menu.querySelector('.bulk-context-header');
|
|
if (headerElement) {
|
|
updateElementText(headerElement, 'loras.bulkOperations.selected', { count: state.selectedModels.size });
|
|
}
|
|
}
|
|
|
|
showMenu(x, y, card) {
|
|
this.updateMenuItemsForModelType();
|
|
this.updateSelectedCountHeader();
|
|
super.showMenu(x, y, card);
|
|
}
|
|
|
|
handleMenuAction(action, menuItem) {
|
|
switch (action) {
|
|
case 'add-tags':
|
|
bulkManager.showBulkAddTagsModal();
|
|
break;
|
|
case 'set-base-model':
|
|
bulkManager.showBulkBaseModelModal();
|
|
break;
|
|
case 'send-to-workflow-append':
|
|
bulkManager.sendAllModelsToWorkflow(false);
|
|
break;
|
|
case 'send-to-workflow-replace':
|
|
bulkManager.sendAllModelsToWorkflow(true);
|
|
break;
|
|
case 'copy-all':
|
|
bulkManager.copyAllModelsSyntax();
|
|
break;
|
|
case 'refresh-all':
|
|
bulkManager.refreshAllMetadata();
|
|
break;
|
|
case 'move-all':
|
|
window.moveManager.showMoveModal('bulk');
|
|
break;
|
|
case 'delete-all':
|
|
bulkManager.showBulkDeleteModal();
|
|
break;
|
|
case 'clear':
|
|
bulkManager.clearSelection();
|
|
break;
|
|
default:
|
|
console.warn(`Unknown bulk action: ${action}`);
|
|
}
|
|
}
|
|
}
|