mirror of
https://github.com/sotam0316/drawNET.git
synced 2026-04-25 12:08:36 +09:00
55 lines
1.7 KiB
JavaScript
55 lines
1.7 KiB
JavaScript
import { logger } from '../../utils/logger.js';
|
|
/**
|
|
* graph/styles/registry.js - Central registry for custom X6 shapes (Plugin System)
|
|
*/
|
|
|
|
class ShapeRegistry {
|
|
constructor() {
|
|
this.shapes = new Map();
|
|
}
|
|
|
|
/**
|
|
* Registers a new shape plugin
|
|
* @param {string} type - Node type name (e.g., 'browser', 'triangle')
|
|
* @param {Object} options - Shape configuration
|
|
* @param {string} options.shape - The X6 shape name to register (e.g., 'drawnet-browser')
|
|
* @param {Object} options.definition - The X6 registration object (inherit, markup, attrs, etc.)
|
|
* @param {Object} options.mapping - Custom mapping logic or attribute overrides
|
|
* @param {string} options.icon - Default FontAwesome icon (if applicable)
|
|
*/
|
|
register(type, options) {
|
|
this.shapes.set(type.toLowerCase(), {
|
|
type,
|
|
...options
|
|
});
|
|
}
|
|
|
|
get(type) {
|
|
return this.shapes.get(type.toLowerCase());
|
|
}
|
|
|
|
getAll() {
|
|
return Array.from(this.shapes.values());
|
|
}
|
|
|
|
/**
|
|
* Internal X6 registration helper
|
|
*/
|
|
install(X6) {
|
|
if (!X6) return;
|
|
const registeredShapes = new Set();
|
|
this.shapes.forEach((plugin) => {
|
|
if (plugin.shape && plugin.definition && !registeredShapes.has(plugin.shape)) {
|
|
try {
|
|
X6.Graph.registerNode(plugin.shape, plugin.definition);
|
|
registeredShapes.add(plugin.shape);
|
|
} catch (e) {
|
|
logger.high(`Shape [${plugin.shape}] registration failed:`, e);
|
|
}
|
|
}
|
|
});
|
|
}
|
|
}
|
|
|
|
export const shapeRegistry = new ShapeRegistry();
|