@foblex/flow
Version:
An Angular library designed to simplify the creation and manipulation of dynamic flow. Provides components for flows, nodes, and connections, automating node manipulation and inter-node connections.
63 lines • 10.8 kB
JavaScript
import { __decorate } from "tslib";
import { Injectable } from '@angular/core';
import { CreateConnectionMarkersRequest } from './create-connection-markers-request';
import { FExecutionRegister } from '@foblex/mediator';
import { normalizeDomElementId } from '@foblex/utils';
import * as i0 from "@angular/core";
import * as i1 from "@foblex/platform";
import * as i2 from "../../../f-storage";
let CreateConnectionMarkersExecution = class CreateConnectionMarkersExecution {
fBrowser;
fComponentsStore;
constructor(fBrowser, fComponentsStore) {
this.fBrowser = fBrowser;
this.fComponentsStore = fComponentsStore;
}
handle(request) {
const element = createSVGElement('defs', this.fBrowser);
const fConnection = request.fConnection;
this.getMarkers(fConnection).forEach((marker) => {
const markerElement = this.createMarkerElement(marker, fConnection.fId);
const clone = marker.hostElement.cloneNode(true);
clone.setAttribute('height', `${marker.height}`);
clone.setAttribute('width', `${marker.width}`);
clone.removeAttribute('markerUnits');
clone.style.display = 'unset';
markerElement.append(clone);
element.append(markerElement);
});
fConnection.fDefs.nativeElement.innerHTML = element.innerHTML;
this.makeSafariCompatible(fConnection);
}
getMarkers(fConnection) {
return this.fComponentsStore.fMarkers.filter((x) => fConnection.hostElement.contains(x.hostElement));
}
// Safari does not support markers on path elements if markers are defined after the path element
makeSafariCompatible(fConnection) {
fConnection.fPath.hostElement.replaceWith(fConnection.fPath.hostElement);
}
createMarkerElement(marker, fConnectionId) {
const markerElement = createSVGElement('marker', this.fBrowser);
markerElement.setAttribute('id', normalizeDomElementId(marker.type + '-' + fConnectionId));
markerElement.setAttribute('markerHeight', `${marker.height}`);
markerElement.setAttribute('markerWidth', `${marker.width}`);
markerElement.setAttribute('orient', `${marker.orient}`);
markerElement.setAttribute('refX', `${marker.refX}`);
markerElement.setAttribute('refY', `${marker.refY}`);
markerElement.setAttribute('markerUnits', `${marker.markerUnits}`);
return markerElement;
}
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CreateConnectionMarkersExecution, deps: [{ token: i1.BrowserService }, { token: i2.FComponentsStore }], target: i0.ɵɵFactoryTarget.Injectable });
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CreateConnectionMarkersExecution });
};
CreateConnectionMarkersExecution = __decorate([
FExecutionRegister(CreateConnectionMarkersRequest)
], CreateConnectionMarkersExecution);
export { CreateConnectionMarkersExecution };
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CreateConnectionMarkersExecution, decorators: [{
type: Injectable
}], ctorParameters: () => [{ type: i1.BrowserService }, { type: i2.FComponentsStore }] });
function createSVGElement(tag, fBrowser) {
return fBrowser.document.createElementNS('http://www.w3.org/2000/svg', tag);
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLWNvbm5lY3Rpb24tbWFya2Vycy5leGVjdXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9mLWZsb3cvc3JjL2RvbWFpbi9mLWNvbm5lY3Rpb24vY3JlYXRlLWNvbm5lY3Rpb24tbWFya2Vycy9jcmVhdGUtY29ubmVjdGlvbi1tYXJrZXJzLmV4ZWN1dGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsOEJBQThCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUVyRixPQUFPLEVBQUUsa0JBQWtCLEVBQWMsTUFBTSxrQkFBa0IsQ0FBQztBQUVsRSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxlQUFlLENBQUM7Ozs7QUFLL0MsSUFBTSxnQ0FBZ0MsR0FBdEMsTUFBTSxnQ0FBZ0M7SUFHakM7SUFDQTtJQUZWLFlBQ1UsUUFBd0IsRUFDeEIsZ0JBQWtDO1FBRGxDLGFBQVEsR0FBUixRQUFRLENBQWdCO1FBQ3hCLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7SUFFNUMsQ0FBQztJQUVNLE1BQU0sQ0FBQyxPQUF1QztRQUNuRCxNQUFNLE9BQU8sR0FBbUIsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN4RSxNQUFNLFdBQVcsR0FBRyxPQUFPLENBQUMsV0FBVyxDQUFDO1FBRXhDLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7WUFFOUMsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sRUFBRSxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUM7WUFFeEUsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFnQixDQUFDO1lBQ2hFLEtBQUssQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFLEdBQUksTUFBTSxDQUFDLE1BQU8sRUFBRSxDQUFDLENBQUM7WUFDbkQsS0FBSyxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsR0FBSSxNQUFNLENBQUMsS0FBTSxFQUFFLENBQUMsQ0FBQztZQUNqRCxLQUFLLENBQUMsZUFBZSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1lBQ3JDLEtBQUssQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztZQUM5QixhQUFhLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBRTVCLE9BQU8sQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDaEMsQ0FBQyxDQUFDLENBQUM7UUFFSCxXQUFXLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxTQUFTLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQztRQUU5RCxJQUFJLENBQUMsb0JBQW9CLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDekMsQ0FBQztJQUVNLFVBQVUsQ0FBQyxXQUE0QjtRQUM1QyxPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztJQUN2RyxDQUFDO0lBRUQsaUdBQWlHO0lBQ3pGLG9CQUFvQixDQUFDLFdBQTRCO1FBQ3ZELFdBQVcsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQzNFLENBQUM7SUFFTyxtQkFBbUIsQ0FBQyxNQUFtQixFQUFFLGFBQXFCO1FBQ3BFLE1BQU0sYUFBYSxHQUFHLGdCQUFnQixDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFFaEUsYUFBYSxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUscUJBQXFCLENBQUMsTUFBTSxDQUFDLElBQUksR0FBRyxHQUFHLEdBQUcsYUFBYSxDQUFDLENBQUMsQ0FBQztRQUUzRixhQUFhLENBQUMsWUFBWSxDQUFDLGNBQWMsRUFBRSxHQUFJLE1BQU0sQ0FBQyxNQUFPLEVBQUUsQ0FBQyxDQUFDO1FBQ2pFLGFBQWEsQ0FBQyxZQUFZLENBQUMsYUFBYSxFQUFFLEdBQUksTUFBTSxDQUFDLEtBQU0sRUFBRSxDQUFDLENBQUM7UUFDL0QsYUFBYSxDQUFDLFlBQVksQ0FBQyxRQUFRLEVBQUUsR0FBSSxNQUFNLENBQUMsTUFBTyxFQUFFLENBQUMsQ0FBQztRQUMzRCxhQUFhLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxHQUFJLE1BQU0sQ0FBQyxJQUFLLEVBQUUsQ0FBQyxDQUFDO1FBQ3ZELGFBQWEsQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLEdBQUksTUFBTSxDQUFDLElBQUssRUFBRSxDQUFDLENBQUM7UUFDdkQsYUFBYSxDQUFDLFlBQVksQ0FBQyxhQUFhLEVBQUUsR0FBSSxNQUFNLENBQUMsV0FBWSxFQUFFLENBQUMsQ0FBQztRQUVyRSxPQUFPLGFBQWEsQ0FBQztJQUN2QixDQUFDO3dHQXJEVSxnQ0FBZ0M7NEdBQWhDLGdDQUFnQzs7QUFBaEMsZ0NBQWdDO0lBRDVDLGtCQUFrQixDQUFDLDhCQUE4QixDQUFDO0dBQ3RDLGdDQUFnQyxDQXNENUM7OzRGQXREWSxnQ0FBZ0M7a0JBRjVDLFVBQVU7O0FBMERYLFNBQVMsZ0JBQWdCLENBQXVDLEdBQU0sRUFBRSxRQUF3QjtJQUM5RixPQUFPLFFBQVEsQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDLDRCQUE0QixFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQzlFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDcmVhdGVDb25uZWN0aW9uTWFya2Vyc1JlcXVlc3QgfSBmcm9tICcuL2NyZWF0ZS1jb25uZWN0aW9uLW1hcmtlcnMtcmVxdWVzdCc7XG5pbXBvcnQgeyBGQ29ubmVjdGlvbkJhc2UsIEZNYXJrZXJCYXNlIH0gZnJvbSAnLi4vLi4vLi4vZi1jb25uZWN0aW9uJztcbmltcG9ydCB7IEZFeGVjdXRpb25SZWdpc3RlciwgSUV4ZWN1dGlvbiB9IGZyb20gJ0Bmb2JsZXgvbWVkaWF0b3InO1xuaW1wb3J0IHsgQnJvd3NlclNlcnZpY2UgfSBmcm9tICdAZm9ibGV4L3BsYXRmb3JtJztcbmltcG9ydCB7IG5vcm1hbGl6ZURvbUVsZW1lbnRJZCB9IGZyb20gJ0Bmb2JsZXgvdXRpbHMnO1xuaW1wb3J0IHsgRkNvbXBvbmVudHNTdG9yZSB9IGZyb20gJy4uLy4uLy4uL2Ytc3RvcmFnZSc7XG5cbkBJbmplY3RhYmxlKClcbkBGRXhlY3V0aW9uUmVnaXN0ZXIoQ3JlYXRlQ29ubmVjdGlvbk1hcmtlcnNSZXF1ZXN0KVxuZXhwb3J0IGNsYXNzIENyZWF0ZUNvbm5lY3Rpb25NYXJrZXJzRXhlY3V0aW9uIGltcGxlbWVudHMgSUV4ZWN1dGlvbjxDcmVhdGVDb25uZWN0aW9uTWFya2Vyc1JlcXVlc3QsIHZvaWQ+IHtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGZCcm93c2VyOiBCcm93c2VyU2VydmljZSxcbiAgICBwcml2YXRlIGZDb21wb25lbnRzU3RvcmU6IEZDb21wb25lbnRzU3RvcmVcbiAgKSB7XG4gIH1cblxuICBwdWJsaWMgaGFuZGxlKHJlcXVlc3Q6IENyZWF0ZUNvbm5lY3Rpb25NYXJrZXJzUmVxdWVzdCk6IHZvaWQge1xuICAgIGNvbnN0IGVsZW1lbnQ6IFNWR0RlZnNFbGVtZW50ID0gY3JlYXRlU1ZHRWxlbWVudCgnZGVmcycsIHRoaXMuZkJyb3dzZXIpO1xuICAgIGNvbnN0IGZDb25uZWN0aW9uID0gcmVxdWVzdC5mQ29ubmVjdGlvbjtcblxuICAgIHRoaXMuZ2V0TWFya2VycyhmQ29ubmVjdGlvbikuZm9yRWFjaCgobWFya2VyKSA9PiB7XG5cbiAgICAgIGNvbnN0IG1hcmtlckVsZW1lbnQgPSB0aGlzLmNyZWF0ZU1hcmtlckVsZW1lbnQobWFya2VyLCBmQ29ubmVjdGlvbi5mSWQpO1xuXG4gICAgICBjb25zdCBjbG9uZSA9IG1hcmtlci5ob3N0RWxlbWVudC5jbG9uZU5vZGUodHJ1ZSkgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICBjbG9uZS5zZXRBdHRyaWJ1dGUoJ2hlaWdodCcsIGAkeyBtYXJrZXIuaGVpZ2h0IH1gKTtcbiAgICAgIGNsb25lLnNldEF0dHJpYnV0ZSgnd2lkdGgnLCBgJHsgbWFya2VyLndpZHRoIH1gKTtcbiAgICAgIGNsb25lLnJlbW92ZUF0dHJpYnV0ZSgnbWFya2VyVW5pdHMnKTtcbiAgICAgIGNsb25lLnN0eWxlLmRpc3BsYXkgPSAndW5zZXQnO1xuICAgICAgbWFya2VyRWxlbWVudC5hcHBlbmQoY2xvbmUpO1xuXG4gICAgICBlbGVtZW50LmFwcGVuZChtYXJrZXJFbGVtZW50KTtcbiAgICB9KTtcblxuICAgIGZDb25uZWN0aW9uLmZEZWZzLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gZWxlbWVudC5pbm5lckhUTUw7XG5cbiAgICB0aGlzLm1ha2VTYWZhcmlDb21wYXRpYmxlKGZDb25uZWN0aW9uKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRNYXJrZXJzKGZDb25uZWN0aW9uOiBGQ29ubmVjdGlvbkJhc2UpOiBGTWFya2VyQmFzZVtdIHtcbiAgICByZXR1cm4gdGhpcy5mQ29tcG9uZW50c1N0b3JlLmZNYXJrZXJzLmZpbHRlcigoeCkgPT4gZkNvbm5lY3Rpb24uaG9zdEVsZW1lbnQuY29udGFpbnMoeC5ob3N0RWxlbWVudCkpO1xuICB9XG5cbiAgLy8gU2FmYXJpIGRvZXMgbm90IHN1cHBvcnQgbWFya2VycyBvbiBwYXRoIGVsZW1lbnRzIGlmIG1hcmtlcnMgYXJlIGRlZmluZWQgYWZ0ZXIgdGhlIHBhdGggZWxlbWVudFxuICBwcml2YXRlIG1ha2VTYWZhcmlDb21wYXRpYmxlKGZDb25uZWN0aW9uOiBGQ29ubmVjdGlvbkJhc2UpOiB2b2lkIHtcbiAgICBmQ29ubmVjdGlvbi5mUGF0aC5ob3N0RWxlbWVudC5yZXBsYWNlV2l0aChmQ29ubmVjdGlvbi5mUGF0aC5ob3N0RWxlbWVudCk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZU1hcmtlckVsZW1lbnQobWFya2VyOiBGTWFya2VyQmFzZSwgZkNvbm5lY3Rpb25JZDogc3RyaW5nKTogU1ZHRWxlbWVudCB7XG4gICAgY29uc3QgbWFya2VyRWxlbWVudCA9IGNyZWF0ZVNWR0VsZW1lbnQoJ21hcmtlcicsIHRoaXMuZkJyb3dzZXIpO1xuXG4gICAgbWFya2VyRWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2lkJywgbm9ybWFsaXplRG9tRWxlbWVudElkKG1hcmtlci50eXBlICsgJy0nICsgZkNvbm5lY3Rpb25JZCkpO1xuXG4gICAgbWFya2VyRWxlbWVudC5zZXRBdHRyaWJ1dGUoJ21hcmtlckhlaWdodCcsIGAkeyBtYXJrZXIuaGVpZ2h0IH1gKTtcbiAgICBtYXJrZXJFbGVtZW50LnNldEF0dHJpYnV0ZSgnbWFya2VyV2lkdGgnLCBgJHsgbWFya2VyLndpZHRoIH1gKTtcbiAgICBtYXJrZXJFbGVtZW50LnNldEF0dHJpYnV0ZSgnb3JpZW50JywgYCR7IG1hcmtlci5vcmllbnQgfWApO1xuICAgIG1hcmtlckVsZW1lbnQuc2V0QXR0cmlidXRlKCdyZWZYJywgYCR7IG1hcmtlci5yZWZYIH1gKTtcbiAgICBtYXJrZXJFbGVtZW50LnNldEF0dHJpYnV0ZSgncmVmWScsIGAkeyBtYXJrZXIucmVmWSB9YCk7XG4gICAgbWFya2VyRWxlbWVudC5zZXRBdHRyaWJ1dGUoJ21hcmtlclVuaXRzJywgYCR7IG1hcmtlci5tYXJrZXJVbml0cyB9YCk7XG5cbiAgICByZXR1cm4gbWFya2VyRWxlbWVudDtcbiAgfVxufVxuXG5mdW5jdGlvbiBjcmVhdGVTVkdFbGVtZW50PEsgZXh0ZW5kcyBrZXlvZiBTVkdFbGVtZW50VGFnTmFtZU1hcD4odGFnOiBLLCBmQnJvd3NlcjogQnJvd3NlclNlcnZpY2UpOiBTVkdFbGVtZW50VGFnTmFtZU1hcFtLXSB7XG4gIHJldHVybiBmQnJvd3Nlci5kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJywgdGFnKTtcbn1cbiJdfQ==