UNPKG

ngx-cytoscapejs

Version:
98 lines 11.9 kB
/* 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==