mirror of https://gitee.com/bigwinds/arangodb
GraphViewer: The node shaper is now able to append images as nodes. But still need a proper href
This commit is contained in:
parent
2170063f5c
commit
440d65f4bd
|
@ -59,6 +59,22 @@
|
||||||
* },
|
* },
|
||||||
* update: function(node)
|
* update: function(node)
|
||||||
* }
|
* }
|
||||||
|
*
|
||||||
|
* <image x="0" y="0" height="1140" width="1040" xlink:href="like_a_sir_original.svg"/>
|
||||||
|
*
|
||||||
|
* {
|
||||||
|
* shape: {
|
||||||
|
* type: NodeShaper.shapes.IMAGE,
|
||||||
|
* width: value || function(node),
|
||||||
|
* height: value || function(node),
|
||||||
|
* },
|
||||||
|
* actions: {
|
||||||
|
* "click": function(node),
|
||||||
|
* "drag": function(node)
|
||||||
|
* },
|
||||||
|
* update: function(node)
|
||||||
|
* }
|
||||||
|
*
|
||||||
*/
|
*/
|
||||||
function NodeShaper(parent, flags, idfunc) {
|
function NodeShaper(parent, flags, idfunc) {
|
||||||
"use strict";
|
"use strict";
|
||||||
|
@ -254,6 +270,32 @@ function NodeShaper(parent, flags, idfunc) {
|
||||||
.attr("ry", "8");
|
.attr("ry", "8");
|
||||||
};
|
};
|
||||||
break;
|
break;
|
||||||
|
case NodeShaper.shapes.IMAGE:
|
||||||
|
width = shape.width || 32;
|
||||||
|
height = shape.height || 32;
|
||||||
|
if (_.isFunction(width)) {
|
||||||
|
translateX = function(d) {
|
||||||
|
return -(width(d) / 2);
|
||||||
|
};
|
||||||
|
} else {
|
||||||
|
translateX = -(width / 2);
|
||||||
|
}
|
||||||
|
if (_.isFunction(height)) {
|
||||||
|
translateY = function(d) {
|
||||||
|
return -(height(d) / 2);
|
||||||
|
};
|
||||||
|
} else {
|
||||||
|
translateY = -(height / 2);
|
||||||
|
}
|
||||||
|
addShape = function(node) {
|
||||||
|
node.append("image") // Display nodes as rectangles
|
||||||
|
.attr("width", width) // Set width
|
||||||
|
.attr("height", height) // Set height
|
||||||
|
.attr("x", translateX)
|
||||||
|
.attr("y", translateY)
|
||||||
|
.attr("xlink:href", "8");
|
||||||
|
};
|
||||||
|
break;
|
||||||
case undefined:
|
case undefined:
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
@ -485,5 +527,6 @@ function NodeShaper(parent, flags, idfunc) {
|
||||||
NodeShaper.shapes = Object.freeze({
|
NodeShaper.shapes = Object.freeze({
|
||||||
"NONE": 0,
|
"NONE": 0,
|
||||||
"CIRCLE": 1,
|
"CIRCLE": 1,
|
||||||
"RECT": 2
|
"RECT": 2,
|
||||||
|
"IMAGE": 3
|
||||||
});
|
});
|
|
@ -616,6 +616,120 @@
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
describe('configured for image', function() {
|
||||||
|
var shaper;
|
||||||
|
|
||||||
|
beforeEach(function () {
|
||||||
|
var config = {
|
||||||
|
shape: {
|
||||||
|
type: NodeShaper.shapes.IMAGE
|
||||||
|
}
|
||||||
|
};
|
||||||
|
shaper = new NodeShaper(d3.select("svg"), config);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should draw image elements', function () {
|
||||||
|
var node = [{_id: 1}];
|
||||||
|
shaper.drawNodes(node);
|
||||||
|
expect($("svg .node").length).toEqual(1);
|
||||||
|
expect($("svg image").length).toEqual(1);
|
||||||
|
expect($("svg .node image").length).toEqual(1);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should be able to use a fixed size', function() {
|
||||||
|
shaper = new NodeShaper(d3.select("svg"),
|
||||||
|
{
|
||||||
|
shape: {
|
||||||
|
type: NodeShaper.shapes.IMAGE,
|
||||||
|
width: 15,
|
||||||
|
height: 10
|
||||||
|
}
|
||||||
|
});
|
||||||
|
var nodes = [
|
||||||
|
{_id: 1},
|
||||||
|
{_id: 2},
|
||||||
|
{_id: 3},
|
||||||
|
{_id: 4},
|
||||||
|
{_id: 5}
|
||||||
|
];
|
||||||
|
shaper.drawNodes(nodes);
|
||||||
|
expect($("svg #1 image").attr("width")).toEqual("15");
|
||||||
|
expect($("svg #2 image").attr("width")).toEqual("15");
|
||||||
|
expect($("svg #3 image").attr("width")).toEqual("15");
|
||||||
|
expect($("svg #4 image").attr("width")).toEqual("15");
|
||||||
|
expect($("svg #5 image").attr("width")).toEqual("15");
|
||||||
|
|
||||||
|
expect($("svg #1 image").attr("height")).toEqual("10");
|
||||||
|
expect($("svg #2 image").attr("height")).toEqual("10");
|
||||||
|
expect($("svg #3 image").attr("height")).toEqual("10");
|
||||||
|
expect($("svg #4 image").attr("height")).toEqual("10");
|
||||||
|
expect($("svg #5 image").attr("height")).toEqual("10");
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should be able to use a function to determine the size', function() {
|
||||||
|
var widthFunction = function (node) {
|
||||||
|
return 10 + node._id;
|
||||||
|
},
|
||||||
|
heightFunction = function (node) {
|
||||||
|
return 10 - node._id;
|
||||||
|
},
|
||||||
|
nodes = [
|
||||||
|
{_id: 1},
|
||||||
|
{_id: 2},
|
||||||
|
{_id: 3},
|
||||||
|
{_id: 4},
|
||||||
|
{_id: 5}
|
||||||
|
];
|
||||||
|
shaper = new NodeShaper(d3.select("svg"),
|
||||||
|
{
|
||||||
|
shape: {
|
||||||
|
type: NodeShaper.shapes.IMAGE,
|
||||||
|
width: widthFunction,
|
||||||
|
height: heightFunction
|
||||||
|
}
|
||||||
|
});
|
||||||
|
shaper.drawNodes(nodes);
|
||||||
|
expect($("svg #1 image").attr("width")).toEqual("11");
|
||||||
|
expect($("svg #2 image").attr("width")).toEqual("12");
|
||||||
|
expect($("svg #3 image").attr("width")).toEqual("13");
|
||||||
|
expect($("svg #4 image").attr("width")).toEqual("14");
|
||||||
|
expect($("svg #5 image").attr("width")).toEqual("15");
|
||||||
|
|
||||||
|
expect($("svg #1 image").attr("height")).toEqual("9");
|
||||||
|
expect($("svg #2 image").attr("height")).toEqual("8");
|
||||||
|
expect($("svg #3 image").attr("height")).toEqual("7");
|
||||||
|
expect($("svg #4 image").attr("height")).toEqual("6");
|
||||||
|
expect($("svg #5 image").attr("height")).toEqual("5");
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should display each node exactly once if an event is added', function() {
|
||||||
|
var nodes = [
|
||||||
|
{_id: 1},
|
||||||
|
{_id: 2},
|
||||||
|
{_id: 3},
|
||||||
|
{_id: 4},
|
||||||
|
{_id: 5}
|
||||||
|
];
|
||||||
|
shaper.drawNodes(nodes);
|
||||||
|
|
||||||
|
expect($("svg image").length).toEqual(5);
|
||||||
|
shaper.changeTo({actions: {
|
||||||
|
click: function() {return 0;}
|
||||||
|
}});
|
||||||
|
expect($("svg image").length).toEqual(5);
|
||||||
|
shaper.changeTo({actions: {
|
||||||
|
click: function() {return 1;}
|
||||||
|
}});
|
||||||
|
expect($("svg image").length).toEqual(5);
|
||||||
|
shaper.changeTo({actions: {
|
||||||
|
click: function() {return 2;}
|
||||||
|
}});
|
||||||
|
expect($("svg image").length).toEqual(5);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
describe('configured for rectangle', function () {
|
describe('configured for rectangle', function () {
|
||||||
var shaper;
|
var shaper;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue