UNPKG

sigma

Version:

A JavaScript library dedicated to graph drawing.

120 lines (107 loc) 3.14 kB
/** * Sigma.js Settings * ================================= * * The list of settings and some handy functions. * @module */ import { NodeKey, EdgeKey } from "graphology-types"; import drawLabel from "./rendering/canvas/label"; import drawHover from "./rendering/canvas/hover"; import drawEdgeLabel from "./rendering/canvas/edge-label"; import { EdgeAttributes, NodeAttributes } from "./types"; import CircleNodeProgram from "./rendering/webgl/programs/node.fast"; import LineEdgeProgram from "./rendering/webgl/programs/edge"; import ArrowEdgeProgram from "./rendering/webgl/programs/edge.arrow"; import { EdgeProgramConstructor } from "./rendering/webgl/programs/common/edge"; import { NodeProgramConstructor } from "./rendering/webgl/programs/common/node"; export function validateSettings(settings: Settings): void { // Label grid cell if ( settings.labelGrid && settings.labelGrid.cell && typeof settings.labelGrid.cell === "object" && (!settings.labelGrid.cell.width || !settings.labelGrid.cell.height) ) { throw new Error("Settings: invalid `labelGrid.cell`. Expecting {width, height}."); } } /** * Sigma.js settings * ================================= */ export interface Settings { // Performance hideEdgesOnMove: boolean; hideLabelsOnMove: boolean; renderLabels: boolean; renderEdgeLabels: boolean; // Component rendering defaultNodeColor: string; defaultNodeType: string; defaultEdgeColor: string; defaultEdgeType: string; labelFont: string; labelSize: number; labelWeight: string; edgeLabelFont: string; edgeLabelSize: number; edgeLabelWeight: string; // Labels labelGrid: { cell: { width: number; height: number } | null; renderedSizeThreshold: number; }; // Reducers nodeReducer: null | ((node: NodeKey, data: NodeAttributes) => NodeAttributes); edgeReducer: null | ((edge: EdgeKey, data: EdgeAttributes) => EdgeAttributes); // Features zIndex: boolean; // Renderers labelRenderer: typeof drawLabel; hoverRenderer: typeof drawHover; edgeLabelRenderer: typeof drawEdgeLabel; // Program classes nodeProgramClasses: { [key: string]: NodeProgramConstructor }; edgeProgramClasses: { [key: string]: EdgeProgramConstructor }; } export const DEFAULT_SETTINGS: Settings = { // Performance hideEdgesOnMove: false, hideLabelsOnMove: false, renderLabels: true, renderEdgeLabels: false, // Component rendering defaultNodeColor: "#999", defaultNodeType: "circle", defaultEdgeColor: "#ccc", defaultEdgeType: "line", labelFont: "Arial", labelSize: 14, labelWeight: "normal", edgeLabelFont: "Arial", edgeLabelSize: 14, edgeLabelWeight: "normal", // Labels labelGrid: { cell: null, renderedSizeThreshold: -Infinity, }, // Reducers nodeReducer: null, edgeReducer: null, // Features zIndex: false, // Renderers labelRenderer: drawLabel, hoverRenderer: drawHover, edgeLabelRenderer: drawEdgeLabel, // Program classes nodeProgramClasses: { circle: CircleNodeProgram, }, edgeProgramClasses: { arrow: ArrowEdgeProgram, line: LineEdgeProgram, }, };