ngx-cytoscapejs
Version:
Cytoscape.js Angular Wrapper
98 lines • 11.9 kB
JavaScript
/* eslint-disable class-methods-use-this */
import { Injectable } from '@angular/core';
// @ts-expect-error no types available
import { convert } from '@js4cytoscape/cx-viz-converter';
// @ts-expect-error no types available
import { CyNetworkUtils, CxToJs } from 'cytoscape-cx2js';
import { CxConverter } from '../enum/cx-converter.enum';
import * as i0 from "@angular/core";
/**
* This service handles the conversion from CX to Cytoscape.js graphs.
*/
export class CxService {
/**
* Tries to convert the incoming CX object into CytoscapeOptions using the list of {@link CxConverter}s in sequence.
*
* @param {any} cxData CX object
* @param {CxConverter[]} converters List of {@link CxConverter}s
* @returns {CxConversion | null} On success the resulting CxConversion object is returned, otherwise null is returned.
*/
convert(cxData, converters) {
if (cxData && converters) {
for (let i = 0; i < converters.length; i += 1) {
let conversion = null;
switch (converters[i]) {
case CxConverter.cx2js:
conversion = this.convertWithCx2JS(cxData);
break;
case CxConverter.cxVizConverter:
conversion = this.convertWithCxVizConverter(cxData);
break;
default:
break;
}
if (conversion) {
return conversion;
}
}
}
return null;
}
/**
* Tries to convert the input CX object using [cx2js]{@link https://github.com/cytoscape/cx2js}.
*
* @param {any} cxData CX object
* @returns {CxConversion | null} On success the converted CytoscapeOptions object as well as the attributeNameMap object is returned, otherwise null is returned.
*/
convertWithCx2JS(cxData) {
try {
const utils = new CyNetworkUtils();
const niceCX = utils.rawCXtoNiceCX(cxData);
const cx2Js = new CxToJs(utils);
const attributeNameMap = {};
const elements = cx2Js.cyElementsFromNiceCX(niceCX, attributeNameMap);
const style = cx2Js.cyStyleFromNiceCX(niceCX, attributeNameMap);
const layout = cx2Js.getDefaultLayout();
const zoom = cx2Js.cyZoomFromNiceCX(niceCX);
const pan = cx2Js.cyPanFromNiceCX(niceCX);
const backgroundColor = cx2Js.cyBackgroundColorFromNiceCX(niceCX);
const options = { elements, style, layout, zoom, pan };
const conversion = {
options,
attributeNameMap,
backgroundColor,
};
return conversion;
}
catch (error) {
console.error(error);
}
return null;
}
/**
* Tries to convert the input CX object using [cx-viz-converter]{@link https://github.com/cytoscape/cx-viz-converter}.
*
* @param {any} cxData CX object
* @returns {CytoscapeOptions | null} On success the converted CytoscapeOptions object is returned, otherwise null is returned.
*/
convertWithCxVizConverter(cxData) {
try {
const options = convert(cxData, 'cytoscapeJS');
const conversion = { options };
return conversion;
}
catch (error) {
console.error(error);
}
return null;
}
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.3", ngImport: i0, type: CxService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.1.3", ngImport: i0, type: CxService, providedIn: 'root' });
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.3", ngImport: i0, type: CxService, decorators: [{
type: Injectable,
args: [{
providedIn: 'root',
}]
}] });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3guc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1jeXRvc2NhcGVqcy9zcmMvbGliL3NlcnZpY2UvY3guc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwyQ0FBMkM7QUFDM0MsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUzQyxzQ0FBc0M7QUFDdEMsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3pELHNDQUFzQztBQUN0QyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQzs7QUFHeEQ7O0dBRUc7QUFJSCxNQUFNLE9BQU8sU0FBUztJQUNwQjs7Ozs7O09BTUc7SUFDSCxPQUFPLENBQUMsTUFBVyxFQUFFLFVBQXlCO1FBQzVDLElBQUksTUFBTSxJQUFJLFVBQVUsRUFBRSxDQUFDO1lBQ3pCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxVQUFVLENBQUMsTUFBTSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztnQkFDOUMsSUFBSSxVQUFVLEdBQXdCLElBQUksQ0FBQztnQkFFM0MsUUFBUSxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztvQkFDdEIsS0FBSyxXQUFXLENBQUMsS0FBSzt3QkFDcEIsVUFBVSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsQ0FBQzt3QkFDM0MsTUFBTTtvQkFDUixLQUFLLFdBQVcsQ0FBQyxjQUFjO3dCQUM3QixVQUFVLEdBQUcsSUFBSSxDQUFDLHlCQUF5QixDQUFDLE1BQU0sQ0FBQyxDQUFDO3dCQUNwRCxNQUFNO29CQUNSO3dCQUNFLE1BQU07Z0JBQ1YsQ0FBQztnQkFFRCxJQUFJLFVBQVUsRUFBRSxDQUFDO29CQUNmLE9BQU8sVUFBVSxDQUFDO2dCQUNwQixDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUM7UUFFRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNLLGdCQUFnQixDQUFDLE1BQVc7UUFDbEMsSUFBSSxDQUFDO1lBQ0gsTUFBTSxLQUFLLEdBQUcsSUFBSSxjQUFjLEVBQUUsQ0FBQztZQUNuQyxNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQzNDLE1BQU0sS0FBSyxHQUFHLElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ2hDLE1BQU0sZ0JBQWdCLEdBQUcsRUFBRSxDQUFDO1lBQzVCLE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztZQUN0RSxNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsaUJBQWlCLENBQUMsTUFBTSxFQUFFLGdCQUFnQixDQUFDLENBQUM7WUFDaEUsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLGdCQUFnQixFQUFFLENBQUM7WUFDeEMsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQzVDLE1BQU0sR0FBRyxHQUFHLEtBQUssQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDMUMsTUFBTSxlQUFlLEdBQUcsS0FBSyxDQUFDLDJCQUEyQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBRWxFLE1BQU0sT0FBTyxHQUFxQixFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsQ0FBQztZQUN6RSxNQUFNLFVBQVUsR0FBaUI7Z0JBQy9CLE9BQU87Z0JBQ1AsZ0JBQWdCO2dCQUNoQixlQUFlO2FBQ2hCLENBQUM7WUFFRixPQUFPLFVBQVUsQ0FBQztRQUNwQixDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLE9BQU8sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDdkIsQ0FBQztRQUVELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0sseUJBQXlCLENBQUMsTUFBVztRQUMzQyxJQUFJLENBQUM7WUFDSCxNQUFNLE9BQU8sR0FBcUIsT0FBTyxDQUFDLE1BQU0sRUFBRSxhQUFhLENBQUMsQ0FBQztZQUNqRSxNQUFNLFVBQVUsR0FBaUIsRUFBRSxPQUFPLEVBQUUsQ0FBQztZQUU3QyxPQUFPLFVBQVUsQ0FBQztRQUNwQixDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLE9BQU8sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDdkIsQ0FBQztRQUVELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQzt1R0FwRlUsU0FBUzsyR0FBVCxTQUFTLGNBRlIsTUFBTTs7MkZBRVAsU0FBUztrQkFIckIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBjbGFzcy1tZXRob2RzLXVzZS10aGlzICovXG5pbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDeXRvc2NhcGVPcHRpb25zIH0gZnJvbSAnY3l0b3NjYXBlJztcbi8vIEB0cy1leHBlY3QtZXJyb3Igbm8gdHlwZXMgYXZhaWxhYmxlXG5pbXBvcnQgeyBjb252ZXJ0IH0gZnJvbSAnQGpzNGN5dG9zY2FwZS9jeC12aXotY29udmVydGVyJztcbi8vIEB0cy1leHBlY3QtZXJyb3Igbm8gdHlwZXMgYXZhaWxhYmxlXG5pbXBvcnQgeyBDeU5ldHdvcmtVdGlscywgQ3hUb0pzIH0gZnJvbSAnY3l0b3NjYXBlLWN4MmpzJztcbmltcG9ydCB7IEN4Q29udmVydGVyIH0gZnJvbSAnLi4vZW51bS9jeC1jb252ZXJ0ZXIuZW51bSc7XG5pbXBvcnQgeyBDeENvbnZlcnNpb24gfSBmcm9tICcuLi9pbnRlcmZhY2UvY3gtY29udmVyc2lvbi5pbnRlcmZhY2UnO1xuXG4vKipcbiAqIFRoaXMgc2VydmljZSBoYW5kbGVzIHRoZSBjb252ZXJzaW9uIGZyb20gQ1ggdG8gQ3l0b3NjYXBlLmpzIGdyYXBocy5cbiAqL1xuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIEN4U2VydmljZSB7XG4gIC8qKlxuICAgKiBUcmllcyB0byBjb252ZXJ0IHRoZSBpbmNvbWluZyBDWCBvYmplY3QgaW50byBDeXRvc2NhcGVPcHRpb25zIHVzaW5nIHRoZSBsaXN0IG9mIHtAbGluayBDeENvbnZlcnRlcn1zIGluIHNlcXVlbmNlLlxuICAgKlxuICAgKiBAcGFyYW0ge2FueX0gY3hEYXRhIENYIG9iamVjdFxuICAgKiBAcGFyYW0ge0N4Q29udmVydGVyW119IGNvbnZlcnRlcnMgTGlzdCBvZiB7QGxpbmsgQ3hDb252ZXJ0ZXJ9c1xuICAgKiBAcmV0dXJucyB7Q3hDb252ZXJzaW9uIHwgbnVsbH0gT24gc3VjY2VzcyB0aGUgcmVzdWx0aW5nIEN4Q29udmVyc2lvbiBvYmplY3QgaXMgcmV0dXJuZWQsIG90aGVyd2lzZSBudWxsIGlzIHJldHVybmVkLlxuICAgKi9cbiAgY29udmVydChjeERhdGE6IGFueSwgY29udmVydGVyczogQ3hDb252ZXJ0ZXJbXSk6IEN4Q29udmVyc2lvbiB8IG51bGwge1xuICAgIGlmIChjeERhdGEgJiYgY29udmVydGVycykge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb252ZXJ0ZXJzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgIGxldCBjb252ZXJzaW9uOiBDeENvbnZlcnNpb24gfCBudWxsID0gbnVsbDtcblxuICAgICAgICBzd2l0Y2ggKGNvbnZlcnRlcnNbaV0pIHtcbiAgICAgICAgICBjYXNlIEN4Q29udmVydGVyLmN4MmpzOlxuICAgICAgICAgICAgY29udmVyc2lvbiA9IHRoaXMuY29udmVydFdpdGhDeDJKUyhjeERhdGEpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSBDeENvbnZlcnRlci5jeFZpekNvbnZlcnRlcjpcbiAgICAgICAgICAgIGNvbnZlcnNpb24gPSB0aGlzLmNvbnZlcnRXaXRoQ3hWaXpDb252ZXJ0ZXIoY3hEYXRhKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjb252ZXJzaW9uKSB7XG4gICAgICAgICAgcmV0dXJuIGNvbnZlcnNpb247XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBUcmllcyB0byBjb252ZXJ0IHRoZSBpbnB1dCBDWCBvYmplY3QgdXNpbmcgW2N4MmpzXXtAbGluayBodHRwczovL2dpdGh1Yi5jb20vY3l0b3NjYXBlL2N4MmpzfS5cbiAgICpcbiAgICogQHBhcmFtIHthbnl9IGN4RGF0YSBDWCBvYmplY3RcbiAgICogQHJldHVybnMge0N4Q29udmVyc2lvbiB8IG51bGx9IE9uIHN1Y2Nlc3MgdGhlIGNvbnZlcnRlZCBDeXRvc2NhcGVPcHRpb25zIG9iamVjdCBhcyB3ZWxsIGFzIHRoZSBhdHRyaWJ1dGVOYW1lTWFwIG9iamVjdCBpcyByZXR1cm5lZCwgb3RoZXJ3aXNlIG51bGwgaXMgcmV0dXJuZWQuXG4gICAqL1xuICBwcml2YXRlIGNvbnZlcnRXaXRoQ3gySlMoY3hEYXRhOiBhbnkpOiBDeENvbnZlcnNpb24gfCBudWxsIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgdXRpbHMgPSBuZXcgQ3lOZXR3b3JrVXRpbHMoKTtcbiAgICAgIGNvbnN0IG5pY2VDWCA9IHV0aWxzLnJhd0NYdG9OaWNlQ1goY3hEYXRhKTtcbiAgICAgIGNvbnN0IGN4MkpzID0gbmV3IEN4VG9Kcyh1dGlscyk7XG4gICAgICBjb25zdCBhdHRyaWJ1dGVOYW1lTWFwID0ge307XG4gICAgICBjb25zdCBlbGVtZW50cyA9IGN4MkpzLmN5RWxlbWVudHNGcm9tTmljZUNYKG5pY2VDWCwgYXR0cmlidXRlTmFtZU1hcCk7XG4gICAgICBjb25zdCBzdHlsZSA9IGN4MkpzLmN5U3R5bGVGcm9tTmljZUNYKG5pY2VDWCwgYXR0cmlidXRlTmFtZU1hcCk7XG4gICAgICBjb25zdCBsYXlvdXQgPSBjeDJKcy5nZXREZWZhdWx0TGF5b3V0KCk7XG4gICAgICBjb25zdCB6b29tID0gY3gySnMuY3lab29tRnJvbU5pY2VDWChuaWNlQ1gpO1xuICAgICAgY29uc3QgcGFuID0gY3gySnMuY3lQYW5Gcm9tTmljZUNYKG5pY2VDWCk7XG4gICAgICBjb25zdCBiYWNrZ3JvdW5kQ29sb3IgPSBjeDJKcy5jeUJhY2tncm91bmRDb2xvckZyb21OaWNlQ1gobmljZUNYKTtcblxuICAgICAgY29uc3Qgb3B0aW9uczogQ3l0b3NjYXBlT3B0aW9ucyA9IHsgZWxlbWVudHMsIHN0eWxlLCBsYXlvdXQsIHpvb20sIHBhbiB9O1xuICAgICAgY29uc3QgY29udmVyc2lvbjogQ3hDb252ZXJzaW9uID0ge1xuICAgICAgICBvcHRpb25zLFxuICAgICAgICBhdHRyaWJ1dGVOYW1lTWFwLFxuICAgICAgICBiYWNrZ3JvdW5kQ29sb3IsXG4gICAgICB9O1xuXG4gICAgICByZXR1cm4gY29udmVyc2lvbjtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvKipcbiAgICogVHJpZXMgdG8gY29udmVydCB0aGUgaW5wdXQgQ1ggb2JqZWN0IHVzaW5nIFtjeC12aXotY29udmVydGVyXXtAbGluayBodHRwczovL2dpdGh1Yi5jb20vY3l0b3NjYXBlL2N4LXZpei1jb252ZXJ0ZXJ9LlxuICAgKlxuICAgKiBAcGFyYW0ge2FueX0gY3hEYXRhIENYIG9iamVjdFxuICAgKiBAcmV0dXJucyB7Q3l0b3NjYXBlT3B0aW9ucyB8IG51bGx9IE9uIHN1Y2Nlc3MgdGhlIGNvbnZlcnRlZCBDeXRvc2NhcGVPcHRpb25zIG9iamVjdCBpcyByZXR1cm5lZCwgb3RoZXJ3aXNlIG51bGwgaXMgcmV0dXJuZWQuXG4gICAqL1xuICBwcml2YXRlIGNvbnZlcnRXaXRoQ3hWaXpDb252ZXJ0ZXIoY3hEYXRhOiBhbnkpOiBDeENvbnZlcnNpb24gfCBudWxsIHtcbiAgICB0cnkge1xuICAgICAgY29uc3Qgb3B0aW9uczogQ3l0b3NjYXBlT3B0aW9ucyA9IGNvbnZlcnQoY3hEYXRhLCAnY3l0b3NjYXBlSlMnKTtcbiAgICAgIGNvbnN0IGNvbnZlcnNpb246IEN4Q29udmVyc2lvbiA9IHsgb3B0aW9ucyB9O1xuXG4gICAgICByZXR1cm4gY29udmVyc2lvbjtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cbiJdfQ==