fybdp-d3-kg
Version:
Knowledge Graph using React and D3.js
310 lines (309 loc) • 11.7 kB
TypeScript
/// <reference types="node" />
import * as d3 from 'd3';
import { VowlMath } from './util/math';
import { IGraph } from './grlib';
import { BaseNode } from './elements/nodes/BaseNode';
import { BaseProperty } from './elements/properties/baseProperty';
import EventEmitter from 'events';
/**
*
* https://www.jb51.net/article/132763.html
*/
export declare class Graph extends EventEmitter implements IGraph {
curveFunction: any;
paused: boolean;
graphContainer: d3.Selection<any>;
nodeContainer: d3.Selection<any>;
labelContainer: d3.Selection<any>;
cardinalityContainer: d3.Selection<any>;
linkContainer: d3.Selection<any>;
editContainer: d3.Selection<any>;
nodeElements: d3.Selection<any>;
initialLoad: boolean;
updateRenderingDuringSimulation: boolean;
labelGroupElements: d3.Selection<any>;
linkGroups: d3.Selection<any>;
linkPathElements: d3.Selection<any>;
cardinalityElements: d3.Selection<any>;
classNodes: BaseNode[];
labelNodes: any[];
links: any;
properties: BaseProperty[];
unfilteredData: any;
simulation: any;
drag: any;
zoom: any;
zoomFactor: number;
centerGraphViewOnLoad: boolean;
transformAnimation: boolean;
graphTranslation: number[];
graphUpdateRequired: boolean;
pulseNodeIds: never[];
nodeArrayForPulse: never[];
nodeMap: never[];
locationId: number;
defaultZoom: number;
defaultTargetZoom: number;
global_dof: number;
touchDevice: boolean;
last_touch_time: any;
supportDblclick: boolean;
originalD3_dblClickFunction: () => void;
originalD3_touchZoomFunction: () => void;
deleteGroupElement: any;
addDataPropertyGroupElement: any;
donutMenuContainer: any;
draggerPathLayer: any;
draggerLayer: any;
draggerObjectsArray: any[];
delayedHider: any;
nodeFreezer: any;
hoveredNodeElement: any;
hoveredPropertyElement: any;
draggingStarted: boolean;
frozenDomainForPropertyDragger: any;
frozenRangeForPropertyDragger: any;
eP: number;
eN: number;
editMode: boolean;
ignoreOtherHoverEvents: boolean;
forceNotZooming: boolean;
now: any;
seenEditorHint: boolean;
showFilterWarning: boolean;
keepDetailsCollapsedOnLoading: boolean;
cachedJsonOBJ: null;
options: any;
parser: any;
language: string;
classDragger: any;
rangeDragger: any;
domainDragger: any;
shadowClone: any;
donutMenus: any;
d3: any;
static _installedPlugins: never[];
static plugins: {};
constructor();
get Math(): typeof VowlMath;
/** --------------------------------------------------------- **/
/** -- getter and setter definitions -- **/
/** --------------------------------------------------------- **/
isEditorMode(): boolean;
getGlobalDOF(): number;
setGlobalDOF(val: any): void;
updateZoomSliderValue: (val?: number | undefined) => void;
setDefaultZoom(val: any): void;
setTargetZoom(val: any): void;
getPaused(): boolean;
setPaused(p: any): this;
graphOptions(): any;
scaleFactor(): number;
translation(): number[];
graphNodeElements(): any;
graphLabelElements(): any[];
graphLinkElements(): any;
size(): {
nodes: any;
properties: any;
};
setSliderZoom(val: any): this;
setFilterWarning(val: any): this;
setZoom(value: any): void;
setTranslation(translation: any): void;
Options(): any;
getUpdateDictionary(): any;
/** --------------------------------------------------------- **/
/** graph initialize & rendering related functions **/
/** --------------------------------------------------------- **/
/**
* Initializes
*/
initialize: (props: any) => this;
initializeModules: () => void;
/**
* Initializes the grlib.
*/
initializeGraph: () => void;
lazyRefresh: () => void;
showEditorHintIfNeeded: () => void;
setDefaultForceTickFunction(): void;
private hiddenRecalculatePositions;
private recalculatePositions;
private redrawGraph;
/**
* Redraws all elements like nodes, links, ...
*/
private redrawContent;
private onClickDonutMenu;
private addClickEvents;
private defaultIriValue;
/**
* Adjusts the containers current scale and position.
*/
private zoomed;
updateCanvasContainerSize: () => void;
/**
* Loads all settings, removes the old grlib (if it exists) and draws a new one.
*/
start: () => this;
updateStyle: () => void;
update: () => void;
reload: () => void;
load: () => void;
fastUpdate: () => void;
getNodeMapForSearch: () => never[];
reset: () => void;
/** --------------------------------------------------------- **/
/** -- data related handling -- **/
/** --------------------------------------------------------- **/
private loadGraphData;
private quick_refreshGraphData;
private refreshGraphData;
clearAllGraphData: () => void;
getCachedJsonObj(): null;
clearGraphData: () => void;
private generateDictionary;
private filterFunction;
/** --------------------------------------------------------- **/
/** -- force-layout related functions -- **/
/** --------------------------------------------------------- **/
private storeLinksOnNodes;
private setForceLayoutData;
/**
* The label nodes are positioned randomly, because they are created from scratch if the data changes and lose
* their position information. With this hack the position of old labels is copied to the new labels.
*/
private setPositionOfOldLabelsOnNewLabels;
updatePropertyDraggerElements: (property: any) => void;
private refreshGraphStyle;
private remove;
generateEditElements: () => void;
getUnfilteredData: () => any;
getClassDataForTtlExport: () => any;
getPropertyDataForTtlExport: () => any[];
private calculateLinkPartDistance;
private getVisibleLinkDistance;
updateNodeMap: () => void;
updateHaloStyles: () => void;
isADraggerActive: () => boolean;
private transform;
/** --------------------------------------------------------- **/
/** -- Touch behaviour functions -- **/
/** --------------------------------------------------------- **/
setTouchDevice(val: any): void;
isTouchDevice(): boolean;
/** --------------------------------------------------------- **/
/** -- halo and localization functions -- **/
/** --------------------------------------------------------- **/
private updateHaloRadius;
private getScreenCoords;
private getClickedScreenCoords;
computeDistanceToCenter: (node: any, inverse?: boolean | undefined) => void;
zoomToElementInGraph: (element: any) => void;
updateElementHaloRadius: (element: any) => void;
private targetLocationZoom;
private getWorldPosFromScreen;
locateSearchResult: () => void;
resetSearchHighlight: () => void;
updatePulseIds: (nodeIdArray?: never[]) => void;
highLightNodes: (nodeIdArray: any) => void;
hideHalos: () => any;
private nodeInViewport;
getBoundingBoxForTex: () => number[];
private updateTargetElement;
calcBboxPos: (bbox: any) => {
sP: any[];
eP: number[];
cx: number;
cy: number;
};
private transformStr;
forceRelocationEvent: (dynamic?: boolean | undefined) => void;
/** --------------------------------------------------------- **/
/** -- VOWL EDITOR create/ edit /delete functions -- **/
/** --------------------------------------------------------- **/
changeNodeType: (element: any) => void;
changePropertyType: (element: any) => false | undefined;
removeEditElements: () => void;
editorMode(val: any): boolean | undefined;
private createNewNodeAtPosition;
private addNewNodeElement;
getTargetNode: (position: any) => null;
genericPropertySanityCheck(domain: any, range: any, typeString: any, header: any, action: any): boolean;
checkIfIriClassAlreadyExist(url: any): any;
classesSanityCheck(classElement: any, targetType: any): boolean;
propertyCheckExistenceChecker(property: any, domain: any, range: any): boolean;
sanityCheckProperty(domain: any, range: any, typeString: any): boolean;
createNewObjectProperty: (domain: any, range: any, draggerEndposition: any) => false | undefined;
createDataTypeProperty: (node: any) => void;
removeNodesViaResponse: (nodesToRemove: any, propsToRemove: any) => void;
removeNodeViaEditor: (node: any) => void;
removePropertyViaEditor: (property: any) => void;
executeColorExternalsModule: () => void;
executeCompactNotationModule: () => void;
executeEmptyLiteralFilter: () => void;
/** --------------------------------------------------------- **/
/** -- animation functions for the nodes -- **/
/** --------------------------------------------------------- **/
animateDynamicLabelWidth: () => void;
/** --------------------------------------------------------- **/
/** -- Touch behaviour functions -- **/
/** --------------------------------------------------------- **/
private modified_dblClickFunction;
private doubletap;
private touchzoomed;
private modified_dblTouchFunction;
/** --------------------------------------------------------- **/
/** -- Hover and Selection functions, adding edit elements -- **/
/** --------------------------------------------------------- **/
setIgnoreOtherHoverEvents: (val: any) => void;
private delayedHiddingHoverElements;
/**
* 更新动态标签及其悬停元素的实验代码
*/
private editElementHoverOnHidden;
private editElementHoverOutHidden;
private editElementHoverOn;
killDelayedTimer: () => void;
/**
* 编辑模式hover元素
* @param tbh
* @param touchBehaviour
*/
editElementHoverOut: (tbh?: boolean | undefined) => void;
activateHoverElementsForProperties: (val: any, property: any, inversed: any, touchBehaviour: any) => void;
updateDraggerElements: () => void;
private setAddDataPropertyHoverElementPosition;
private setDeleteHoverElementPosition;
hideAllMenus(): this;
private setDeleteHoverElementPositionProperty;
activateHoverElements: (val: any, node: any, touchBehaviour: any) => void;
/**
* 注册插件并且bind到this 推荐使用, 注入graph实例对象,挂在原型链上
* const MyPlugin = {
install(Graph, options) {
Graph.prototype.myattr = 'Example plugin Property';
Graph.prototype.myfn = function() {
console.log(this);
return this.myattr
}
}
};
Graph.use(MyPlugin);
* @param plugin 插件纯函数
*/
static use: (plugin: any) => any;
/**
* or 纯函数的方法
* const A = function(graph){
* let graph = this;
* }
* Graph.install('a',A);
* @param name
* @param descriptor
*/
static install(name: any, descriptor: any): void;
private pluginsCall;
caller(name: any): any;
}