svg-path-d
Version:
SVG path data (path[d] attribute content) manipulation library.
76 lines • 2.19 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.clonePath = exports.makePath = exports.createPathNode = exports.getY = exports.getX = void 0;
var command_1 = require("./command");
var command_assertion_1 = require("./command-assertion");
var in_place_transform_1 = require("./in-place-transform");
function getMoveTo(item) {
for (var node = item; node; node = node.prev) {
if (command_assertion_1.isMoveTo(node)) {
return node;
}
}
}
function getX(item) {
if (item) {
if (command_assertion_1.isClosePath(item)) {
return getX(getMoveTo(item.prev));
}
else if (command_assertion_1.isVLineTo(item)) {
return getX(item.prev);
}
else {
return item.x;
}
}
return 0;
}
exports.getX = getX;
function getY(item) {
if (item) {
if (command_assertion_1.isClosePath(item)) {
return getY(getMoveTo(item.prev));
}
else if (command_assertion_1.isHLineTo(item)) {
return getY(item.prev);
}
else {
return item.y;
}
}
return 0;
}
exports.getY = getY;
function createPathNode(name, args, relative, prev) {
var node = command_1.createDrawItem(name, args);
node.prev = prev;
if (relative && prev) {
in_place_transform_1.applyTranslate(node, getX(prev), getY(prev));
}
return node;
}
exports.createPathNode = createPathNode;
/**
* Connects items and casts the DrawTo array into a PathNode array.
* @param items array to cast
*/
function makePath(items) {
var prev;
for (var _i = 0, _a = items; _i < _a.length; _i++) {
var node = _a[_i];
node.prev = prev;
prev = node;
}
return items;
}
exports.makePath = makePath;
function clonePath(items, mapper) {
var prev;
return items.map(function (value, index, arr) {
var next = mapper(value, index, arr);
next.prev = prev;
return (prev = next);
});
}
exports.clonePath = clonePath;
//# sourceMappingURL=path-node.js.map