| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143 |
- /**
- * DevExtreme (viz/sankey/node_item.js)
- * Version: 19.1.16
- * Build date: Tue Oct 18 2022
- *
- * Copyright (c) 2012 - 2022 Developer Express Inc. ALL RIGHTS RESERVED
- * Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/
- */
- "use strict";
- var states = ["normal", "hover"];
- var isDefined = require("../../core/utils/type").isDefined;
- function _compileAttrs(color, itemOptions, itemBaseOptions) {
- var border = itemOptions.border;
- var baseBorder = itemBaseOptions.border;
- var borderVisible = isDefined(border.visible) ? border.visible : baseBorder.visible;
- var borderWidth = isDefined(border.width) ? border.width : baseBorder.width;
- var borderOpacity = isDefined(border.opacity) ? border.opacity : isDefined(baseBorder.opacity) ? baseBorder.opacity : 1;
- var opacity = isDefined(itemOptions.opacity) ? itemOptions.opacity : isDefined(itemBaseOptions.opacity) ? itemBaseOptions.opacity : 1;
- return {
- fill: itemOptions.color || color,
- "stroke-width": borderVisible ? borderWidth : 0,
- stroke: itemOptions.border.color || itemBaseOptions.border.color,
- "stroke-opacity": borderOpacity,
- opacity: opacity,
- hatching: itemOptions.hatching
- }
- }
- function compileLabelAttrs(labelOptions, filter, node) {
- var _patchFontOptions = require("../core/utils").patchFontOptions;
- if (labelOptions.useNodeColors) {
- labelOptions.font.color = node.color
- }
- var borderVisible = isDefined(labelOptions.border.visible) ? labelOptions.border.visible : false;
- var borderWidth = isDefined(labelOptions.border.width) ? labelOptions.border.width : 0;
- var borderColor = isDefined(labelOptions.border.color) ? labelOptions.border.color : labelOptions.font.color;
- var borderOpacity = isDefined(labelOptions.border.opacity) ? labelOptions.border.opacity : 1;
- var attr = {
- filter: filter
- };
- if (borderVisible && borderWidth) {
- attr.stroke = borderColor;
- attr["stroke-width"] = borderVisible ? borderWidth : 0;
- attr["stroke-opacity"] = borderOpacity
- }
- return {
- attr: attr,
- css: _patchFontOptions(labelOptions.font)
- }
- }
- function Node(widget, params) {
- var that = this;
- var widgetOffset = widget._renderer.getRootOffset();
- that.code = 0;
- that.widget = widget;
- that.color = params.color;
- that.options = params.options;
- that.rect = params.rect;
- that.title = params.rect._name;
- that.coords = {
- x: params.rect.x + params.rect.width / 2 + widgetOffset.left,
- y: params.rect.y + params.rect.height / 2 + widgetOffset.top
- };
- that.id = params.id;
- that.linksIn = params.linksIn;
- that.linksOut = params.linksOut;
- this.states = {
- normal: _compileAttrs(this.color, that.options, that.options),
- hover: _compileAttrs(this.color, that.options.hoverStyle, that.options)
- }
- }
- Node.prototype = {
- compileAttrs: function() {
- return _compileAttrs(this.color, this.options)
- },
- getState: function() {
- return states[this.code]
- },
- isHovered: function() {
- return !!(1 & this.code)
- },
- setState: function(code, state) {
- var _this = this;
- if (state) {
- this.code |= code
- } else {
- this.code &= ~code
- }
- if (state) {
- this.linksIn.concat(this.linksOut).forEach(function(adjacentLink) {
- _this.widget._links[adjacentLink.index].setAdjacentNodeHover(true)
- })
- } else {
- this.widget._links.forEach(function(link) {
- link.isAdjacentNodeHovered() && link.adjacentNodeHover(false)
- });
- this.hideTooltip()
- }
- this.widget._applyNodesAppearance();
- this.widget._applyLinksAppearance()
- },
- hover: function(state) {
- if (!this.widget._getOption("hoverEnabled", true) || state === this.isHovered()) {
- return
- }
- this.widget._suspend();
- state && this.widget.clearHover();
- this.setState(1, state);
- this.widget._eventTrigger("nodeHoverChanged", {
- target: this
- });
- this.widget._resume()
- },
- setHover: function() {
- this.hover(true)
- },
- showTooltip: function(coords) {
- this.widget._getOption("hoverEnabled", true) && this.widget._tooltip && this.widget._tooltip.show({
- type: "node",
- info: {
- title: this.title,
- weightIn: this.linksIn.reduce(function(previousValue, currentValue) {
- return previousValue + currentValue.weight
- }, 0),
- weightOut: this.linksOut.reduce(function(previousValue, currentValue) {
- return previousValue + currentValue.weight
- }, 0)
- }
- }, "undefined" !== typeof coords ? {
- x: coords[0],
- y: coords[1]
- } : this.coords)
- },
- hideTooltip: function() {
- this.widget._tooltip && this.widget._tooltip.hide()
- },
- getLabelAttributes: function(labelSettings, filter) {
- return compileLabelAttrs(labelSettings, filter, this)
- }
- };
- module.exports = Node;
|