UNPKG

fybdp-d3-kg

Version:

Knowledge Graph using React and D3.js

310 lines (309 loc) 11.7 kB
/// <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; }