From 4e8e71de7db27aa29f10328bc1a42c67c967eb24 Mon Sep 17 00:00:00 2001 From: mcyph <20507948+mcyph@users.noreply.github.com> Date: Sun, 21 Mar 2021 17:06:10 +1100 Subject: [PATCH] fixed import and init errors --- src/mxgraph/handler/mxCellMarker.js | 6 +- src/mxgraph/handler/mxEdgeHandler.js | 2 +- src/mxgraph/handler/mxElbowEdgeHandler.js | 1 + .../handler/mxSelectionCellsHandler.js | 3 + src/mxgraph/model/mxGraphModel.js | 5 + src/mxgraph/mxClient.js | 499 ++++++------ src/mxgraph/shape/mxActor.js | 1 + src/mxgraph/shape/mxArrow.js | 1 + src/mxgraph/shape/mxArrowConnector.js | 3 + src/mxgraph/shape/mxCloud.js | 1 + src/mxgraph/shape/mxConnector.js | 4 +- src/mxgraph/shape/mxCylinder.js | 3 + src/mxgraph/shape/mxDoubleEllipse.js | 3 + src/mxgraph/shape/mxEllipse.js | 1 + src/mxgraph/shape/mxHexagon.js | 4 + src/mxgraph/shape/mxImageShape.js | 1 + src/mxgraph/shape/mxLine.js | 1 + src/mxgraph/shape/mxPolyline.js | 2 + src/mxgraph/shape/mxRectangleShape.js | 1 + src/mxgraph/shape/mxRhombus.js | 2 + src/mxgraph/shape/mxShape.js | 11 +- src/mxgraph/shape/mxStencil.js | 3 +- src/mxgraph/shape/mxSwimlane.js | 8 + src/mxgraph/shape/mxText.js | 1 + src/mxgraph/util/mxConstants.js | 2 + src/mxgraph/util/mxResources.js | 721 +++++++++--------- src/mxgraph/util/mxUtils.js | 27 +- src/mxgraph/view/mxCellOverlay.js | 2 + src/mxgraph/view/mxGraph.js | 3 +- 29 files changed, 711 insertions(+), 611 deletions(-) diff --git a/src/mxgraph/handler/mxCellMarker.js b/src/mxgraph/handler/mxCellMarker.js index 817a7ad62..84c20c967 100644 --- a/src/mxgraph/handler/mxCellMarker.js +++ b/src/mxgraph/handler/mxCellMarker.js @@ -3,6 +3,10 @@ * Copyright (c) 2006-2015, Gaudenz Alder * Updated to ES9 syntax by David Morrissey 2021 */ +import mxEventSource from "../util/mxEventSource"; +import mxConstants from "../util/mxConstants"; +import mxCellHighlight from "./mxCellHighlight"; +import mxEventObject from "../util/mxEventObject"; class mxCellMarker extends mxEventSource { /** @@ -261,7 +265,7 @@ class mxCellMarker extends mxEventSource { this.validState = null; } - if (state != this.markedState || color != this.currentColor) { + if (state !== this.markedState || color !== this.currentColor) { this.currentColor = color; if (state != null && this.currentColor != null) { diff --git a/src/mxgraph/handler/mxEdgeHandler.js b/src/mxgraph/handler/mxEdgeHandler.js index 99f2c9ff9..39dbdc5a8 100644 --- a/src/mxgraph/handler/mxEdgeHandler.js +++ b/src/mxgraph/handler/mxEdgeHandler.js @@ -6,7 +6,7 @@ import mxCellMarker from "./mxCellMarker"; import mxPoint from "../util/mxPoint"; import mxConstants from "../util/mxConstants"; -import mxUtils from "../examples/map-background/leaflet"; +import mxUtils from "../util/mxUtils"; import mxImageShape from "../shape/mxImageShape"; import mxRectangleShape from "../shape/mxRectangleShape"; import mxConnectionConstraint from "../view/mxConnectionConstraint"; diff --git a/src/mxgraph/handler/mxElbowEdgeHandler.js b/src/mxgraph/handler/mxElbowEdgeHandler.js index 15ec5e592..7393af851 100644 --- a/src/mxgraph/handler/mxElbowEdgeHandler.js +++ b/src/mxgraph/handler/mxElbowEdgeHandler.js @@ -3,6 +3,7 @@ * Copyright (c) 2006-2015, Gaudenz Alder * Updated to ES9 syntax by David Morrissey 2021 */ +import mxEdgeHandler from "./mxEdgeHandler"; class mxElbowEdgeHandler extends mxEdgeHandler { /** diff --git a/src/mxgraph/handler/mxSelectionCellsHandler.js b/src/mxgraph/handler/mxSelectionCellsHandler.js index 7dfee704a..bd8f6f0cd 100644 --- a/src/mxgraph/handler/mxSelectionCellsHandler.js +++ b/src/mxgraph/handler/mxSelectionCellsHandler.js @@ -3,6 +3,9 @@ * Copyright (c) 2006-2015, Gaudenz Alder * Updated to ES9 syntax by David Morrissey 2021 */ +import mxEventSource from "../util/mxEventSource"; +import mxDictionary from "../util/mxDictionary"; +import mxEventObject from "../util/mxEventObject"; class mxSelectionCellsHandler extends mxEventSource { /** diff --git a/src/mxgraph/model/mxGraphModel.js b/src/mxgraph/model/mxGraphModel.js index 11a0bf616..c7664099c 100644 --- a/src/mxgraph/model/mxGraphModel.js +++ b/src/mxgraph/model/mxGraphModel.js @@ -4,6 +4,11 @@ * Updated to ES9 syntax by David Morrissey 2021 */ import mxEventSource from "../util/mxEventSource"; +import mxUndoableEdit from "../util/mxUndoableEdit"; +import mxCellPath from "./mxCellPath"; +import mxDictionary from "../util/mxDictionary"; +import mxObjectIdentity from "../util/mxObjectIdentity"; +import mxCell from "./mxCell"; class mxGraphModel extends mxEventSource { /** diff --git a/src/mxgraph/mxClient.js b/src/mxgraph/mxClient.js index 0484b28a0..3440dcf4a 100644 --- a/src/mxgraph/mxClient.js +++ b/src/mxgraph/mxClient.js @@ -2,6 +2,8 @@ * Copyright (c) 2006-2017, JGraph Ltd * Copyright (c) 2006-2017, Gaudenz Alder */ +import mxResources from "./util/mxResources"; + let mxClient = { /** * Class: mxClient @@ -23,19 +25,247 @@ let mxClient = { */ VERSION: '4.2.2', + /** + * Variable: mxResourceExtension + * + * Optional global config variable to specify the extension of resource files. + * Default is true. NOTE: This is a global variable, not a variable of mxClient. + * + * (code) + * + * + * (end) + */ + mxResourceExtension: '.txt', + setResourceExtension: (value) => { + mxClient.mxResourceExtension = value; + mxResources.extension = value; + }, + + /** + * Variable: mxLoadResources + * + * Optional global config variable to toggle loading of the two resource files + * in and . Default is true. NOTE: This is a global variable, + * not a variable of mxClient. If this is false, you can use + * with its callback to load the default bundles asynchronously. + * + * (code) + * + * + * (end) + */ + mxLoadResources: true, + setLoadResources: (value) => {}, + + /** + * Variable: mxForceIncludes + * + * Optional global config variable to force loading the JavaScript files in + * development mode. Default is undefined. NOTE: This is a global variable, + * not a variable of mxClient. + * + * (code) + * + * + * (end) + */ + mxForceIncludes: false, + setForceIncludes: (value) => { + mxClient.mxForceIncludes = value; + }, + + /** + * Variable: mxLoadStylesheets + * + * Optional global config variable to toggle loading of the CSS files when + * the library is initialized. Default is true. NOTE: This is a global variable, + * not a variable of mxClient. + * + * (code) + * + * + * (end) + */ + mxLoadStylesheets: true, + setLoadStylesheets: (value) => { + mxClient.mxLoadStylesheets = value; + }, + + /** + * Variable: basePath + * + * Basepath for all URLs in the core without trailing slash. Default is '.'. + * Set mxBasePath prior to loading the mxClient library as follows to override + * this setting: + * + * (code) + * + * + * (end) + * + * When using a relative path, the path is relative to the URL of the page that + * contains the assignment. Trailing slashes are automatically removed. + */ + basePath: '.', + setBasePath: (value) => { + if (typeof(value) != 'undefined' && value.length > 0) { + // Adds a trailing slash if required + if (value.substring(value.length - 1) === '/') { + value = value.substring(0, value.length - 1); + } + mxClient.basePath = value; + } else { + mxClient.basePath = '.'; + } + }, + + /** + * Variable: imageBasePath + * + * Basepath for all images URLs in the core without trailing slash. Default is + * + '/images'. Set mxImageBasePath prior to loading the + * mxClient library as follows to override this setting: + * + * (code) + * + * + * (end) + * + * When using a relative path, the path is relative to the URL of the page that + * contains the assignment. Trailing slashes are automatically removed. + */ + imageBasePath: '.', + setImageBasePath: (value) => { + if (typeof(value) != 'undefined' && value.length > 0) { + // Adds a trailing slash if required + if (value.substring(value.length - 1) === '/') { + value = value.substring(0, value.length - 1); + } + mxClient.imageBasePath = value; + } else { + mxClient.imageBasePath = mxClient.basePath + '/images'; + } + }, + + /** + * Variable: language + * + * Defines the language of the client, eg. en for english, de for german etc. + * The special value 'none' will disable all built-in internationalization and + * resource loading. See for handling identifiers + * with and without a dash. + * + * Set mxLanguage prior to loading the mxClient library as follows to override + * this setting: + * + * (code) + * + * + * (end) + * + * If internationalization is disabled, then the following variables should be + * overridden to reflect the current language of the system. These variables are + * cleared when i18n is disabled. + * , , + * , , + * , , , + * , , + * , , + * , , + * , , + * and + * . + */ + language: typeof window !== "undefined" ? navigator.language : 'en', + setLanguage: (value) => { + if (typeof(value) != 'undefined' && value != null) { + mxClient.language = value; + } + else { + mxClient.language = navigator.language; + } + }, + + /** + * Variable: defaultLanguage + * + * Defines the default language which is used in the common resource files. Any + * resources for this language will only load the common resource file, but not + * the language-specific resource file. Default is 'en'. + * + * Set mxDefaultLanguage prior to loading the mxClient library as follows to override + * this setting: + * + * (code) + * + * + * (end) + */ + defaultLanguage: 'en', + setDefaultLanguage: (value) => { + if (typeof(value) != 'undefined' && value != null) { + mxClient.defaultLanguage = value; + } else { + mxClient.defaultLanguage = 'en'; + } + }, + + /** + * Variable: languages + * + * Defines the optional array of all supported language extensions. The default + * language does not have to be part of this list. See + * . + * + * (code) + * + * + * (end) + * + * This is used to avoid unnecessary requests to language files, ie. if a 404 + * will be returned. + */ + + setLanguages: (value) => { + if (typeof(value) != 'undefined' && value != null) { + mxClient.languages = value; + } + }, + /** * Variable: IS_EDGE * * True if the current browser is Microsoft Edge. */ - IS_EDGE: navigator.userAgent != null && !!navigator.userAgent.match(/Edge\//), + IS_EDGE: typeof window !== 'undefined' && + navigator.userAgent != null && !!navigator.userAgent.match(/Edge\//), /** * Variable: IS_NS * * True if the current browser is Netscape (including Firefox). */ - IS_NS: navigator.userAgent != null && + IS_NS: typeof window !== 'undefined' && + navigator.userAgent != null && navigator.userAgent.indexOf('Mozilla/') >= 0 && navigator.userAgent.indexOf('MSIE') < 0 && navigator.userAgent.indexOf('Edge/') < 0, @@ -45,42 +275,48 @@ let mxClient = { * * True if the current browser is Safari. */ - IS_SF: /Apple Computer, Inc/.test(navigator.vendor), + IS_SF: typeof window !== 'undefined' && + /Apple Computer, Inc/.test(navigator.vendor), /** * Variable: IS_ANDROID * * Returns true if the user agent contains Android. */ - IS_ANDROID: navigator.appVersion.indexOf('Android') >= 0, + IS_ANDROID: typeof window !== 'undefined' && + navigator.appVersion.indexOf('Android') >= 0, /** * Variable: IS_IOS * * Returns true if the user agent is an iPad, iPhone or iPod. */ - IS_IOS: (/iP(hone|od|ad)/.test(navigator.platform)), + IS_IOS: typeof window !== 'undefined' && + (/iP(hone|od|ad)/.test(navigator.platform)), /** * Variable: IS_GC * * True if the current browser is Google Chrome. */ - IS_GC: /Google Inc/.test(navigator.vendor), + IS_GC: typeof window !== 'undefined' && + /Google Inc/.test(navigator.vendor), /** * Variable: IS_CHROMEAPP * * True if the this is running inside a Chrome App. */ - IS_CHROMEAPP: window.chrome != null && chrome.app != null && chrome.app.runtime != null, + IS_CHROMEAPP: typeof window !== 'undefined' && + window.chrome != null && chrome.app != null && chrome.app.runtime != null, /** * Variable: IS_FF * * True if the current browser is Firefox. */ - IS_FF: typeof InstallTrigger !== 'undefined', + IS_FF: typeof window !== 'undefined' && + typeof InstallTrigger !== 'undefined', /** * Variable: IS_MT @@ -89,7 +325,8 @@ let mxClient = { * for all Firefox-based browsers newer than or equal 3, such as Camino, * Iceweasel, Seamonkey and Iceape. */ - IS_MT: (navigator.userAgent.indexOf('Firefox/') >= 0 && + IS_MT: typeof window !== 'undefined' && + ((navigator.userAgent.indexOf('Firefox/') >= 0 && navigator.userAgent.indexOf('Firefox/1.') < 0 && navigator.userAgent.indexOf('Firefox/2.') < 0) || (navigator.userAgent.indexOf('Iceweasel/') >= 0 && @@ -98,14 +335,15 @@ let mxClient = { (navigator.userAgent.indexOf('SeaMonkey/') >= 0 && navigator.userAgent.indexOf('SeaMonkey/1.') < 0) || (navigator.userAgent.indexOf('Iceape/') >= 0 && - navigator.userAgent.indexOf('Iceape/1.') < 0), + navigator.userAgent.indexOf('Iceape/1.') < 0)), /** * Variable: IS_SVG * * True if the browser supports SVG. */ - IS_SVG: navigator.appName.toUpperCase() != 'MICROSOFT INTERNET EXPLORER', + IS_SVG: typeof window !== 'undefined' && + navigator.appName.toUpperCase() !== 'MICROSOFT INTERNET EXPLORER', /** * Variable: NO_FO @@ -113,29 +351,33 @@ let mxClient = { * True if foreignObject support is not available. This is the case for * Opera, older SVG-based browsers and all versions of IE. */ - NO_FO: !document.createElementNS || document.createElementNS('http://www.w3.org/2000/svg', - 'foreignObject') != '[object SVGForeignObjectElement]' || navigator.userAgent.indexOf('Opera/') >= 0, + NO_FO: typeof window !== 'undefined' && + (!document.createElementNS || document.createElementNS('http://www.w3.org/2000/svg','foreignObject') !== + '[object SVGForeignObjectElement]' || navigator.userAgent.indexOf('Opera/') >= 0), /** * Variable: IS_WIN * * True if the client is a Windows. */ - IS_WIN: navigator.appVersion.indexOf('Win') > 0, + IS_WIN: typeof window !== 'undefined' && + navigator.appVersion.indexOf('Win') > 0, /** * Variable: IS_MAC * * True if the client is a Mac. */ - IS_MAC: navigator.appVersion.indexOf('Mac') > 0, + IS_MAC: typeof window !== 'undefined' && + navigator.appVersion.indexOf('Mac') > 0, /** * Variable: IS_CHROMEOS * * True if the client is a Chrome OS. */ - IS_CHROMEOS: /\bCrOS\b/.test(navigator.appVersion), + IS_CHROMEOS: typeof window !== 'undefined' && + /\bCrOS\b/.test(navigator.appVersion), /** * Variable: IS_TOUCH @@ -143,21 +385,25 @@ let mxClient = { * True if this device supports touchstart/-move/-end events (Apple iOS, * Android, Chromebook and Chrome Browser on touch-enabled devices). */ - IS_TOUCH: 'ontouchstart' in document.documentElement, + IS_TOUCH: typeof window !== 'undefined' && + 'ontouchstart' in document.documentElement, /** * Variable: IS_POINTER * * True if this device supports Microsoft pointer events (always false on Macs). */ - IS_POINTER: window.PointerEvent != null && !(navigator.appVersion.indexOf('Mac') > 0), + IS_POINTER: typeof window !== 'undefined' && + window.PointerEvent != null && + !(navigator.appVersion.indexOf('Mac') > 0), /** * Variable: IS_LOCAL * * True if the documents location does not start with http:// or https://. */ - IS_LOCAL: document.location.href.indexOf('http://') < 0 && + IS_LOCAL: typeof window !== 'undefined' && + document.location.href.indexOf('http://') < 0 && document.location.href.indexOf('https://') < 0, /** @@ -239,7 +485,7 @@ let mxClient = { let pending = mxClient.defaultBundles.length; function callback() { - if (--pending == 0) { + if (--pending === 0) { fn(); } } @@ -250,215 +496,4 @@ let mxClient = { } }; -/** - * Variable: mxLoadResources - * - * Optional global config variable to toggle loading of the two resource files - * in and . Default is true. NOTE: This is a global variable, - * not a variable of mxClient. If this is false, you can use - * with its callback to load the default bundles asynchronously. - * - * (code) - * - * - * (end) - */ -if (typeof(mxLoadResources) == 'undefined') { - mxLoadResources = true; -} - -/** - * Variable: mxForceIncludes - * - * Optional global config variable to force loading the JavaScript files in - * development mode. Default is undefined. NOTE: This is a global variable, - * not a variable of mxClient. - * - * (code) - * - * - * (end) - */ -if (typeof(mxForceIncludes) == 'undefined') { - mxForceIncludes = false; -} - -/** - * Variable: mxResourceExtension - * - * Optional global config variable to specify the extension of resource files. - * Default is true. NOTE: This is a global variable, not a variable of mxClient. - * - * (code) - * - * - * (end) - */ -if (typeof(mxResourceExtension) == 'undefined') { - mxResourceExtension = '.txt'; -} - -/** - * Variable: mxLoadStylesheets - * - * Optional global config variable to toggle loading of the CSS files when - * the library is initialized. Default is true. NOTE: This is a global variable, - * not a variable of mxClient. - * - * (code) - * - * - * (end) - */ -if (typeof(mxLoadStylesheets) == 'undefined') { - mxLoadStylesheets = true; -} - -/** - * Variable: basePath - * - * Basepath for all URLs in the core without trailing slash. Default is '.'. - * Set mxBasePath prior to loading the mxClient library as follows to override - * this setting: - * - * (code) - * - * - * (end) - * - * When using a relative path, the path is relative to the URL of the page that - * contains the assignment. Trailing slashes are automatically removed. - */ -if (typeof(mxBasePath) != 'undefined' && mxBasePath.length > 0) { - // Adds a trailing slash if required - if (mxBasePath.substring(mxBasePath.length - 1) === '/') { - mxBasePath = mxBasePath.substring(0, mxBasePath.length - 1); - } - mxClient.basePath = mxBasePath; -} else { - mxClient.basePath = '.'; -} - -/** - * Variable: imageBasePath - * - * Basepath for all images URLs in the core without trailing slash. Default is - * + '/images'. Set mxImageBasePath prior to loading the - * mxClient library as follows to override this setting: - * - * (code) - * - * - * (end) - * - * When using a relative path, the path is relative to the URL of the page that - * contains the assignment. Trailing slashes are automatically removed. - */ -if (typeof(mxImageBasePath) != 'undefined' && mxImageBasePath.length > 0) { - // Adds a trailing slash if required - if (mxImageBasePath.substring(mxImageBasePath.length - 1) === '/') { - mxImageBasePath = mxImageBasePath.substring(0, mxImageBasePath.length - 1); - } - mxClient.imageBasePath = mxImageBasePath; -} else { - mxClient.imageBasePath = mxClient.basePath + '/images'; -} - -/** - * Variable: language - * - * Defines the language of the client, eg. en for english, de for german etc. - * The special value 'none' will disable all built-in internationalization and - * resource loading. See for handling identifiers - * with and without a dash. - * - * Set mxLanguage prior to loading the mxClient library as follows to override - * this setting: - * - * (code) - * - * - * (end) - * - * If internationalization is disabled, then the following variables should be - * overridden to reflect the current language of the system. These variables are - * cleared when i18n is disabled. - * , , - * , , - * , , , - * , , - * , , - * , , - * , , - * and - * . - */ -if (typeof(mxLanguage) != 'undefined' && mxLanguage != null) { - mxClient.language = mxLanguage; -} -else { - mxClient.language = navigator.language; -} - -/** - * Variable: defaultLanguage - * - * Defines the default language which is used in the common resource files. Any - * resources for this language will only load the common resource file, but not - * the language-specific resource file. Default is 'en'. - * - * Set mxDefaultLanguage prior to loading the mxClient library as follows to override - * this setting: - * - * (code) - * - * - * (end) - */ -if (typeof(mxDefaultLanguage) != 'undefined' && mxDefaultLanguage != null) { - mxClient.defaultLanguage = mxDefaultLanguage; -} else { - mxClient.defaultLanguage = 'en'; -} - -// Adds all required stylesheets and namespaces -if (mxLoadStylesheets) { - mxClient.link('stylesheet', mxClient.basePath + '/css/common.css'); -} - -/** - * Variable: languages - * - * Defines the optional array of all supported language extensions. The default - * language does not have to be part of this list. See - * . - * - * (code) - * - * - * (end) - * - * This is used to avoid unnecessary requests to language files, ie. if a 404 - * will be returned. - */ -if (typeof(mxLanguages) != 'undefined' && mxLanguages != null) { - mxClient.languages = mxLanguages; -} +export default mxClient; diff --git a/src/mxgraph/shape/mxActor.js b/src/mxgraph/shape/mxActor.js index 6b27818a7..7a47de923 100644 --- a/src/mxgraph/shape/mxActor.js +++ b/src/mxgraph/shape/mxActor.js @@ -3,6 +3,7 @@ * Copyright (c) 2006-2015, Gaudenz Alder * Updated to ES9 syntax by David Morrissey 2021 */ +import mxShape from "./mxShape"; class mxActor extends mxShape { /** diff --git a/src/mxgraph/shape/mxArrow.js b/src/mxgraph/shape/mxArrow.js index 48b78bbcc..6910b92c8 100644 --- a/src/mxgraph/shape/mxArrow.js +++ b/src/mxgraph/shape/mxArrow.js @@ -3,6 +3,7 @@ * Copyright (c) 2006-2015, Gaudenz Alder * Updated to ES9 syntax by David Morrissey 2021 */ +import mxShape from "./mxShape"; class mxArrow extends mxShape { /** diff --git a/src/mxgraph/shape/mxArrowConnector.js b/src/mxgraph/shape/mxArrowConnector.js index ca2c9d947..5ac26a655 100644 --- a/src/mxgraph/shape/mxArrowConnector.js +++ b/src/mxgraph/shape/mxArrowConnector.js @@ -3,6 +3,9 @@ * Copyright (c) 2006-2015, Gaudenz Alder * Updated to ES9 syntax by David Morrissey 2021 */ +import mxShape from "./mxShape"; +import mxConstants from "../util/mxConstants"; +import mxUtils from "../util/mxUtils"; class mxArrowConnector extends mxShape { /** diff --git a/src/mxgraph/shape/mxCloud.js b/src/mxgraph/shape/mxCloud.js index 10a50ed66..07139b7a2 100644 --- a/src/mxgraph/shape/mxCloud.js +++ b/src/mxgraph/shape/mxCloud.js @@ -3,6 +3,7 @@ * Copyright (c) 2006-2015, Gaudenz Alder * Updated to ES9 syntax by David Morrissey 2021 */ +import mxActor from "./mxActor"; class mxCloud extends mxActor { /** diff --git a/src/mxgraph/shape/mxConnector.js b/src/mxgraph/shape/mxConnector.js index 0391f2987..2917643f5 100644 --- a/src/mxgraph/shape/mxConnector.js +++ b/src/mxgraph/shape/mxConnector.js @@ -4,8 +4,10 @@ * Updated to ES9 syntax by David Morrissey 2021 */ import mxConstants from "../util/mxConstants"; +import mxPolyline from "./mxPolyline"; +import mxUtils from "../util/mxUtils"; -class mxConnector extends mxPolyLine { +class mxConnector extends mxPolyline { /** * Class: mxConnector * diff --git a/src/mxgraph/shape/mxCylinder.js b/src/mxgraph/shape/mxCylinder.js index 4324a0e11..9fd234abb 100644 --- a/src/mxgraph/shape/mxCylinder.js +++ b/src/mxgraph/shape/mxCylinder.js @@ -3,6 +3,9 @@ * Copyright (c) 2006-2015, Gaudenz Alder * Updated to ES9 syntax by David Morrissey 2021 */ +import mxShape from "./mxShape"; +import mxConstants from "../util/mxConstants"; +import mxUtils from "../util/mxUtils"; class mxCylinder extends mxShape { /** diff --git a/src/mxgraph/shape/mxDoubleEllipse.js b/src/mxgraph/shape/mxDoubleEllipse.js index 7225168ea..12becc4de 100644 --- a/src/mxgraph/shape/mxDoubleEllipse.js +++ b/src/mxgraph/shape/mxDoubleEllipse.js @@ -5,6 +5,9 @@ */ import mxRectangle from "../util/mxRectangle"; +import mxShape from "./mxShape"; +import mxConstants from "../util/mxConstants"; +import mxUtils from "../util/mxUtils"; class mxDoubleEllipse extends mxShape { /** diff --git a/src/mxgraph/shape/mxEllipse.js b/src/mxgraph/shape/mxEllipse.js index 3e4fd065d..0d133ec9c 100644 --- a/src/mxgraph/shape/mxEllipse.js +++ b/src/mxgraph/shape/mxEllipse.js @@ -3,6 +3,7 @@ * Copyright (c) 2006-2015, Gaudenz Alder * Updated to ES9 syntax by David Morrissey 2021 */ +import mxShape from "./mxShape"; class mxEllipse extends mxShape { /** diff --git a/src/mxgraph/shape/mxHexagon.js b/src/mxgraph/shape/mxHexagon.js index 4a3693e8f..bc128a6b6 100644 --- a/src/mxgraph/shape/mxHexagon.js +++ b/src/mxgraph/shape/mxHexagon.js @@ -3,6 +3,10 @@ * Copyright (c) 2006-2015, Gaudenz Alder * Updated to ES9 syntax by David Morrissey 2021 */ +import mxActor from "./mxActor"; +import mxPoint from "../util/mxPoint"; +import mxUtils from "../util/mxUtils"; +import mxConstants from "../util/mxConstants"; class mxHexagon extends mxActor { /** diff --git a/src/mxgraph/shape/mxImageShape.js b/src/mxgraph/shape/mxImageShape.js index 44fbe0995..47d1cc26c 100644 --- a/src/mxgraph/shape/mxImageShape.js +++ b/src/mxgraph/shape/mxImageShape.js @@ -6,6 +6,7 @@ import mxUtils from "../util/mxUtils"; import mxConstants from "../util/mxConstants"; +import mxRectangleShape from "./mxRectangleShape"; class mxImageShape extends mxRectangleShape { /** diff --git a/src/mxgraph/shape/mxLine.js b/src/mxgraph/shape/mxLine.js index c0018d629..8827411ad 100644 --- a/src/mxgraph/shape/mxLine.js +++ b/src/mxgraph/shape/mxLine.js @@ -3,6 +3,7 @@ * Copyright (c) 2006-2015, Gaudenz Alder * Updated to ES9 syntax by David Morrissey 2021 */ +import mxShape from "./mxShape"; class mxLine extends mxShape { /** diff --git a/src/mxgraph/shape/mxPolyline.js b/src/mxgraph/shape/mxPolyline.js index 43624d2d7..068b15b60 100644 --- a/src/mxgraph/shape/mxPolyline.js +++ b/src/mxgraph/shape/mxPolyline.js @@ -3,6 +3,8 @@ * Copyright (c) 2006-2015, Gaudenz Alder * Updated to ES9 syntax by David Morrissey 2021 */ +import mxShape from "./mxShape"; +import mxConstants from "../util/mxConstants"; class mxPolyline extends mxShape { /** diff --git a/src/mxgraph/shape/mxRectangleShape.js b/src/mxgraph/shape/mxRectangleShape.js index 82226a9af..87fa87d66 100644 --- a/src/mxgraph/shape/mxRectangleShape.js +++ b/src/mxgraph/shape/mxRectangleShape.js @@ -6,6 +6,7 @@ import mxConstants from "../util/mxConstants"; import mxUtils from "../util/mxUtils"; +import mxShape from "./mxShape"; class mxRectangleShape extends mxShape { /** diff --git a/src/mxgraph/shape/mxRhombus.js b/src/mxgraph/shape/mxRhombus.js index 0df028aef..ccf28858b 100644 --- a/src/mxgraph/shape/mxRhombus.js +++ b/src/mxgraph/shape/mxRhombus.js @@ -3,6 +3,8 @@ * Copyright (c) 2006-2015, Gaudenz Alder * Updated to ES9 syntax by David Morrissey 2021 */ +import mxShape from "./mxShape"; +import mxPoint from "../util/mxPoint"; class mxRhombus extends mxShape { /** diff --git a/src/mxgraph/shape/mxShape.js b/src/mxgraph/shape/mxShape.js index 35c57e9bb..19d2ceca9 100644 --- a/src/mxgraph/shape/mxShape.js +++ b/src/mxgraph/shape/mxShape.js @@ -3,6 +3,11 @@ * Copyright (c) 2006-2015, Gaudenz Alder * Updated to ES9 syntax by David Morrissey 2021 */ +import mxRectangle from "../util/mxRectangle"; +import mxUtils from "../util/mxUtils"; +import mxConstants from "../util/mxConstants"; +import mxPoint from "../util/mxPoint"; +import mxSvgCanvas2D from "../util/mxSvgCanvas2D"; class mxShape { /** @@ -212,7 +217,11 @@ class mxShape { * * Constructs a new shape. */ - constructor(stencil) { + constructor(...args) { + this._constructor(...args); + }; + + _constructor = (stencil) => { this.stencil = stencil; this.initStyles(); }; diff --git a/src/mxgraph/shape/mxStencil.js b/src/mxgraph/shape/mxStencil.js index b8eb1cfb5..d2473393b 100644 --- a/src/mxgraph/shape/mxStencil.js +++ b/src/mxgraph/shape/mxStencil.js @@ -6,6 +6,7 @@ import mxRectangle from "../util/mxRectangle"; import mxConnectionConstraint from "FIXME"; +import mxShape from "./mxShape"; class mxStencil extends mxShape { /** @@ -281,7 +282,7 @@ class mxStencil extends mxShape { * desc - XML node that contains the stencil description. */ constructor(desc) { - // constructor not called + super(); this.desc = desc; this.parseDescription(); this.parseConstraints(); diff --git a/src/mxgraph/shape/mxSwimlane.js b/src/mxgraph/shape/mxSwimlane.js index b34867ee6..89441228f 100644 --- a/src/mxgraph/shape/mxSwimlane.js +++ b/src/mxgraph/shape/mxSwimlane.js @@ -3,6 +3,9 @@ * Copyright (c) 2006-2015, Gaudenz Alder * Updated to ES9 syntax by David Morrissey 2021 */ +import mxShape from "./mxShape"; +import mxRectangle from "../util/mxRectangle"; +import mxConstants from "../util/mxConstants"; class mxSwimlane extends mxShape { /** @@ -46,6 +49,11 @@ class mxSwimlane extends mxShape { this.strokewidth = (strokewidth != null) ? strokewidth : 1; }; + _constructor = () => { + // explicitly do nothing in + // overridden constructor in mxShape + }; + /** * Function: isRoundable * diff --git a/src/mxgraph/shape/mxText.js b/src/mxgraph/shape/mxText.js index 0f42e45a5..605fea7ee 100644 --- a/src/mxgraph/shape/mxText.js +++ b/src/mxgraph/shape/mxText.js @@ -9,6 +9,7 @@ import mxConstants from "../util/mxConstants"; import mxUtils from "../util/mxUtils"; import mxPoint from "../util/mxPoint"; import mxSvgCanvas2D from "../util/mxSvgCanvas2D"; +import mxShape from "./mxShape"; class mxText extends mxShape { /** diff --git a/src/mxgraph/util/mxConstants.js b/src/mxgraph/util/mxConstants.js index a816a9b75..bb8431ff9 100644 --- a/src/mxgraph/util/mxConstants.js +++ b/src/mxgraph/util/mxConstants.js @@ -4,6 +4,8 @@ * Updated to ES9 syntax by David Morrissey 2021 */ +import mxRectangle from "./mxRectangle"; + let mxConstants = { /** * Class: mxConstants diff --git a/src/mxgraph/util/mxResources.js b/src/mxgraph/util/mxResources.js index 42e4728df..3b731d98d 100644 --- a/src/mxgraph/util/mxResources.js +++ b/src/mxgraph/util/mxResources.js @@ -2,388 +2,389 @@ * Copyright (c) 2006-2016, JGraph Ltd * Copyright (c) 2006-2016, Gaudenz Alder */ -let mxResources = - { - /** - * Class: mxResources - * - * Implements internationalization. You can provide any number of - * resource files on the server using the following format for the - * filename: name[-en].properties. The en stands for any lowercase - * 2-character language shortcut (eg. de for german, fr for french). - * - * If the optional language extension is omitted, then the file is used as a - * default resource which is loaded in all cases. If a properties file for a - * specific language exists, then it is used to override the settings in the - * default resource. All entries in the file are of the form key=value. The - * values may then be accessed in code via . Lines without - * equal signs in the properties files are ignored. - * - * Resource files may either be added programmatically using - * or via a resource tag in the UI section of the - * editor configuration file, eg: - * - * (code) - * - * - * - * (end) - * - * The above element will load examples/resources/mxWorkflow.properties as well - * as the language specific file for the current language, if it exists. - * - * Values may contain placeholders of the form {1}...{n} where each placeholder - * is replaced with the value of the corresponding array element in the params - * argument passed to . The placeholder {1} maps to the first - * element in the array (at index 0). - * - * See for more information on specifying the default - * language or disabling all loading of resources. - * - * Lines that start with a # sign will be ignored. - * - * Special characters - * - * To use unicode characters, use the standard notation (eg. \u8fd1) or %u as a - * prefix (eg. %u20AC will display a Euro sign). For normal hex encoded strings, - * use % as a prefix, eg. %F6 will display a "o umlaut" (ö). - * - * See to disable this. If you disable this, make sure that - * your files are UTF-8 encoded. - * - * Asynchronous loading - * - * By default, the core adds two resource files synchronously at load time. - * To load these files asynchronously, set to false - * before loading mxClient.js and use instead. - * - * Variable: resources - * - * Object that maps from keys to values. - */ - resources: {}, +import mxClient from "../mxClient"; +import mxConstants from "./mxConstants"; - /** - * Variable: extension - * - * Specifies the extension used for language files. Default is . - */ - extension: mxResourceExtension, +let mxResources = { + /** + * Class: mxResources + * + * Implements internationalization. You can provide any number of + * resource files on the server using the following format for the + * filename: name[-en].properties. The en stands for any lowercase + * 2-character language shortcut (eg. de for german, fr for french). + * + * If the optional language extension is omitted, then the file is used as a + * default resource which is loaded in all cases. If a properties file for a + * specific language exists, then it is used to override the settings in the + * default resource. All entries in the file are of the form key=value. The + * values may then be accessed in code via . Lines without + * equal signs in the properties files are ignored. + * + * Resource files may either be added programmatically using + * or via a resource tag in the UI section of the + * editor configuration file, eg: + * + * (code) + * + * + * + * (end) + * + * The above element will load examples/resources/mxWorkflow.properties as well + * as the language specific file for the current language, if it exists. + * + * Values may contain placeholders of the form {1}...{n} where each placeholder + * is replaced with the value of the corresponding array element in the params + * argument passed to . The placeholder {1} maps to the first + * element in the array (at index 0). + * + * See for more information on specifying the default + * language or disabling all loading of resources. + * + * Lines that start with a # sign will be ignored. + * + * Special characters + * + * To use unicode characters, use the standard notation (eg. \u8fd1) or %u as a + * prefix (eg. %u20AC will display a Euro sign). For normal hex encoded strings, + * use % as a prefix, eg. %F6 will display a "o umlaut" (ö). + * + * See to disable this. If you disable this, make sure that + * your files are UTF-8 encoded. + * + * Asynchronous loading + * + * By default, the core adds two resource files synchronously at load time. + * To load these files asynchronously, set to false + * before loading mxClient.js and use instead. + * + * Variable: resources + * + * Object that maps from keys to values. + */ + resources: {}, - /** - * Variable: resourcesEncoded - * - * Specifies whether or not values in resource files are encoded with \u or - * percentage. Default is false. - */ - resourcesEncoded: false, + /** + * Variable: extension + * + * Specifies the extension used for language files. Default is . + */ + extension: '.txt', - /** - * Variable: loadDefaultBundle - * - * Specifies if the default file for a given basename should be loaded. - * Default is true. - */ - loadDefaultBundle: true, + /** + * Variable: resourcesEncoded + * + * Specifies whether or not values in resource files are encoded with \u or + * percentage. Default is false. + */ + resourcesEncoded: false, - /** - * Variable: loadDefaultBundle - * - * Specifies if the specific language file file for a given basename should - * be loaded. Default is true. - */ - loadSpecialBundle: true, + /** + * Variable: loadDefaultBundle + * + * Specifies if the default file for a given basename should be loaded. + * Default is true. + */ + loadDefaultBundle: true, - /** - * Function: isLanguageSupported - * - * Hook for subclassers to disable support for a given language. This - * implementation returns true if lan is in . - * - * Parameters: - * - * lan - The current language. - */ - isLanguageSupported: (lan) => { - if (mxClient.languages != null) { - return mxUtils.indexOf(mxClient.languages, lan) >= 0; - } + /** + * Variable: loadDefaultBundle + * + * Specifies if the specific language file file for a given basename should + * be loaded. Default is true. + */ + loadSpecialBundle: true, - return true; - }, + /** + * Function: isLanguageSupported + * + * Hook for subclassers to disable support for a given language. This + * implementation returns true if lan is in . + * + * Parameters: + * + * lan - The current language. + */ + isLanguageSupported: (lan) => { + if (mxClient.languages != null) { + return mxUtils.indexOf(mxClient.languages, lan) >= 0; + } - /** - * Function: getDefaultBundle - * - * Hook for subclassers to return the URL for the special bundle. This - * implementation returns basename + or null if - * is false. - * - * Parameters: - * - * basename - The basename for which the file should be loaded. - * lan - The current language. - */ - getDefaultBundle: (basename, lan) => { - if (mxResources.loadDefaultBundle || !mxResources.isLanguageSupported(lan)) { - return basename + mxResources.extension; - } else { - return null; - } - }, + return true; + }, - /** - * Function: getSpecialBundle - * - * Hook for subclassers to return the URL for the special bundle. This - * implementation returns basename + '_' + lan + or null if - * is false or lan equals . - * - * If is not null and contains - * a dash, then this method checks if returns true - * for the full language (including the dash). If that returns false the - * first part of the language (up to the dash) will be tried as an extension. - * - * If is null then the first part of the language is - * used to maintain backwards compatibility. - * - * Parameters: - * - * basename - The basename for which the file should be loaded. - * lan - The language for which the file should be loaded. - */ - getSpecialBundle: (basename, lan) => { - if (mxClient.languages == null || !this.isLanguageSupported(lan)) { - let dash = lan.indexOf('-'); + /** + * Function: getDefaultBundle + * + * Hook for subclassers to return the URL for the special bundle. This + * implementation returns basename + or null if + * is false. + * + * Parameters: + * + * basename - The basename for which the file should be loaded. + * lan - The current language. + */ + getDefaultBundle: (basename, lan) => { + if (mxResources.loadDefaultBundle || !mxResources.isLanguageSupported(lan)) { + return basename + mxResources.extension; + } else { + return null; + } + }, - if (dash > 0) { - lan = lan.substring(0, dash); - } - } + /** + * Function: getSpecialBundle + * + * Hook for subclassers to return the URL for the special bundle. This + * implementation returns basename + '_' + lan + or null if + * is false or lan equals . + * + * If is not null and contains + * a dash, then this method checks if returns true + * for the full language (including the dash). If that returns false the + * first part of the language (up to the dash) will be tried as an extension. + * + * If is null then the first part of the language is + * used to maintain backwards compatibility. + * + * Parameters: + * + * basename - The basename for which the file should be loaded. + * lan - The language for which the file should be loaded. + */ + getSpecialBundle: (basename, lan) => { + if (mxClient.languages == null || !this.isLanguageSupported(lan)) { + let dash = lan.indexOf('-'); - if (mxResources.loadSpecialBundle && mxResources.isLanguageSupported(lan) && lan != mxClient.defaultLanguage) { - return basename + '_' + lan + mxResources.extension; - } else { - return null; - } - }, + if (dash > 0) { + lan = lan.substring(0, dash); + } + } - /** - * Function: add - * - * Adds the default and current language properties file for the specified - * basename. Existing keys are overridden as new files are added. If no - * callback is used then the request is synchronous. - * - * Example: - * - * At application startup, additional resources may be - * added using the following code: - * - * (code) - * mxResources.add('resources/editor'); - * (end) - * - * Parameters: - * - * basename - The basename for which the file should be loaded. - * lan - The language for which the file should be loaded. - * callback - Optional callback for asynchronous loading. - */ - add: (basename, lan, callback) => { - lan = (lan != null) ? lan : ((mxClient.language != null) ? - mxClient.language.toLowerCase() : mxConstants.NONE); + if (mxResources.loadSpecialBundle && mxResources.isLanguageSupported(lan) && lan != mxClient.defaultLanguage) { + return basename + '_' + lan + mxResources.extension; + } else { + return null; + } + }, - if (lan != mxConstants.NONE) { - let defaultBundle = mxResources.getDefaultBundle(basename, lan); - let specialBundle = mxResources.getSpecialBundle(basename, lan); + /** + * Function: add + * + * Adds the default and current language properties file for the specified + * basename. Existing keys are overridden as new files are added. If no + * callback is used then the request is synchronous. + * + * Example: + * + * At application startup, additional resources may be + * added using the following code: + * + * (code) + * mxResources.add('resources/editor'); + * (end) + * + * Parameters: + * + * basename - The basename for which the file should be loaded. + * lan - The language for which the file should be loaded. + * callback - Optional callback for asynchronous loading. + */ + add: (basename, lan, callback) => { + lan = (lan != null) ? lan : ((mxClient.language != null) ? + mxClient.language.toLowerCase() : mxConstants.NONE); - let loadSpecialBundle = () => { - if (specialBundle != null) { - if (callback) { - mxUtils.get(specialBundle, (req) => { - mxResources.parse(req.getText()); - callback(); - }, () => { - callback(); - }); - } else { - try { - let req = mxUtils.load(specialBundle); + if (lan !== mxConstants.NONE) { + let defaultBundle = mxResources.getDefaultBundle(basename, lan); + let specialBundle = mxResources.getSpecialBundle(basename, lan); - if (req.isReady()) { - mxResources.parse(req.getText()); - } - } catch (e) { - // ignore - } - } - } else if (callback != null) { + let loadSpecialBundle = () => { + if (specialBundle != null) { + if (callback) { + mxUtils.get(specialBundle, (req) => { + mxResources.parse(req.getText()); callback(); - } - } + }, () => { + callback(); + }); + } else { + try { + let req = mxUtils.load(specialBundle); - if (defaultBundle != null) { - if (callback) { - mxUtils.get(defaultBundle, (req) => { + if (req.isReady()) { mxResources.parse(req.getText()); - loadSpecialBundle(); - }, () => { - loadSpecialBundle(); - }); - } else { - try { - let req = mxUtils.load(defaultBundle); - - if (req.isReady()) { - mxResources.parse(req.getText()); - } - - loadSpecialBundle(); - } catch (e) { - // ignore - } - } - } else { - // Overlays the language specific file (_lan-extension) - loadSpecialBundle(); - } - } - }, - - /** - * Function: parse - * - * Parses the key, value pairs in the specified - * text and stores them as local resources. - */ - parse: (text) => { - if (text != null) { - let lines = text.split('\n'); - - for (let i = 0; i < lines.length; i++) { - if (lines[i].charAt(0) != '#') { - let index = lines[i].indexOf('='); - - if (index > 0) { - let key = lines[i].substring(0, index); - let idx = lines[i].length; - - if (lines[i].charCodeAt(idx - 1) == 13) { - idx--; - } - - let value = lines[i].substring(index + 1, idx); - - if (this.resourcesEncoded) { - value = value.replace(/\\(?=u[a-fA-F\d]{4})/g, "%"); - mxResources.resources[key] = unescape(value); - } else { - mxResources.resources[key] = value; - } } + } catch (e) { + // ignore } } + } else if (callback != null) { + callback(); } - }, - - /** - * Function: get - * - * Returns the value for the specified resource key. - * - * Example: - * To read the value for 'welomeMessage', use the following: - * (code) - * let result = mxResources.get('welcomeMessage') || ''; - * (end) - * - * This would require an entry of the following form in - * one of the English language resource files: - * (code) - * welcomeMessage=Welcome to mxGraph! - * (end) - * - * The part behind the || is the string value to be used if the given - * resource is not available. - * - * Parameters: - * - * key - String that represents the key of the resource to be returned. - * params - Array of the values for the placeholders of the form {1}...{n} - * to be replaced with in the resulting string. - * defaultValue - Optional string that specifies the default return value. - */ - get: (key, params, defaultValue) => { - let value = mxResources.resources[key]; - - // Applies the default value if no resource was found - if (value == null) { - value = defaultValue; - } - - // Replaces the placeholders with the values in the array - if (value != null && params != null) { - value = mxResources.replacePlaceholders(value, params); - } - - return value; - }, - - /** - * Function: replacePlaceholders - * - * Replaces the given placeholders with the given parameters. - * - * Parameters: - * - * value - String that contains the placeholders. - * params - Array of the values for the placeholders of the form {1}...{n} - * to be replaced with in the resulting string. - */ - replacePlaceholders: (value, params) => { - let result = []; - let index = null; - - for (let i = 0; i < value.length; i++) { - let c = value.charAt(i); - - if (c == '{') { - index = ''; - } else if (index != null && c == '}') { - index = parseInt(index) - 1; - - if (index >= 0 && index < params.length) { - result.push(params[index]); - } - - index = null; - } else if (index != null) { - index += c; - } else { - result.push(c); - } - } - - return result.join(''); - }, - - /** - * Function: loadResources - * - * Loads all required resources asynchronously. Use this to load the graph and - * editor resources if is false. - * - * Parameters: - * - * callback - Callback function for asynchronous loading. - */ - loadResources: (callback) => { - mxResources.add(mxClient.basePath + '/resources/editor', null, () => { - mxResources.add(mxClient.basePath + '/resources/graph', null, callback); - }); } - }; + if (defaultBundle != null) { + if (callback) { + mxUtils.get(defaultBundle, (req) => { + mxResources.parse(req.getText()); + loadSpecialBundle(); + }, () => { + loadSpecialBundle(); + }); + } else { + try { + let req = mxUtils.load(defaultBundle); + + if (req.isReady()) { + mxResources.parse(req.getText()); + } + + loadSpecialBundle(); + } catch (e) { + // ignore + } + } + } else { + // Overlays the language specific file (_lan-extension) + loadSpecialBundle(); + } + } + }, + + /** + * Function: parse + * + * Parses the key, value pairs in the specified + * text and stores them as local resources. + */ + parse: (text) => { + if (text != null) { + let lines = text.split('\n'); + + for (let i = 0; i < lines.length; i++) { + if (lines[i].charAt(0) !== '#') { + let index = lines[i].indexOf('='); + + if (index > 0) { + let key = lines[i].substring(0, index); + let idx = lines[i].length; + + if (lines[i].charCodeAt(idx - 1) === 13) { + idx--; + } + + let value = lines[i].substring(index + 1, idx); + + if (this.resourcesEncoded) { + value = value.replace(/\\(?=u[a-fA-F\d]{4})/g, "%"); + mxResources.resources[key] = unescape(value); + } else { + mxResources.resources[key] = value; + } + } + } + } + } + }, + + /** + * Function: get + * + * Returns the value for the specified resource key. + * + * Example: + * To read the value for 'welomeMessage', use the following: + * (code) + * let result = mxResources.get('welcomeMessage') || ''; + * (end) + * + * This would require an entry of the following form in + * one of the English language resource files: + * (code) + * welcomeMessage=Welcome to mxGraph! + * (end) + * + * The part behind the || is the string value to be used if the given + * resource is not available. + * + * Parameters: + * + * key - String that represents the key of the resource to be returned. + * params - Array of the values for the placeholders of the form {1}...{n} + * to be replaced with in the resulting string. + * defaultValue - Optional string that specifies the default return value. + */ + get: (key, params, defaultValue) => { + let value = mxResources.resources[key]; + + // Applies the default value if no resource was found + if (value == null) { + value = defaultValue; + } + + // Replaces the placeholders with the values in the array + if (value != null && params != null) { + value = mxResources.replacePlaceholders(value, params); + } + + return value; + }, + + /** + * Function: replacePlaceholders + * + * Replaces the given placeholders with the given parameters. + * + * Parameters: + * + * value - String that contains the placeholders. + * params - Array of the values for the placeholders of the form {1}...{n} + * to be replaced with in the resulting string. + */ + replacePlaceholders: (value, params) => { + let result = []; + let index = null; + + for (let i = 0; i < value.length; i++) { + let c = value.charAt(i); + + if (c === '{') { + index = ''; + } else if (index != null && c === '}') { + index = parseInt(index) - 1; + + if (index >= 0 && index < params.length) { + result.push(params[index]); + } + + index = null; + } else if (index != null) { + index += c; + } else { + result.push(c); + } + } + + return result.join(''); + }, + + /** + * Function: loadResources + * + * Loads all required resources asynchronously. Use this to load the graph and + * editor resources if is false. + * + * Parameters: + * + * callback - Callback function for asynchronous loading. + */ + loadResources: (callback) => { + mxResources.add(mxClient.basePath + '/resources/editor', null, () => { + mxResources.add(mxClient.basePath + '/resources/graph', null, callback); + }); + } +}; export default mxResources; diff --git a/src/mxgraph/util/mxUtils.js b/src/mxgraph/util/mxUtils.js index 5c321f9b6..5770073b6 100644 --- a/src/mxgraph/util/mxUtils.js +++ b/src/mxgraph/util/mxUtils.js @@ -6,6 +6,7 @@ import mxEffects from "./mxEffects"; import mxXmlRequest from "./mxXmlRequest"; import mxClient from "../mxClient"; +import mxConstants from "./mxConstants"; let mxUtils = { /** @@ -30,7 +31,7 @@ let mxUtils = { * resource for this key does not exist then the value is used as * the title. Default is 'error'. */ - errorResource: (mxClient.language != 'none') ? 'error' : '', + errorResource: (mxClient.language !== 'none') ? 'error' : '', /** * Variable: closeResource @@ -39,7 +40,7 @@ let mxUtils = { * resource for this key does not exist then the value is used as * the label. Default is 'close'. */ - closeResource: (mxClient.language != 'none') ? 'close' : '', + closeResource: (mxClient.language !== 'none') ? 'close' : '', /** * Variable: errorImage @@ -163,11 +164,11 @@ let mxUtils = { * function to the specified scope. Inside funct, the "this" keyword * becomes a reference to that scope. */ - /*bind: (scope, funct) => { + bind: (scope, funct) => { return () => { return funct.apply(scope, arguments); }; - },*/ + }, /** * Function: eval @@ -393,7 +394,7 @@ let mxUtils = { let parent = child; while (parent != null) { - if (parent == ancestor) { + if (parent === ancestor) { return true; } @@ -582,11 +583,11 @@ let mxUtils = { removeWhitespace: (node, before) => { let tmp = (before) ? node.previousSibling : node.nextSibling; - while (tmp != null && tmp.nodeType == mxConstants.NODETYPE_TEXT) { + while (tmp != null && tmp.nodeType === mxConstants.NODETYPE_TEXT) { let next = (before) ? tmp.previousSibling : tmp.nextSibling; let text = mxUtils.getTextContent(tmp); - if (mxUtils.trim(text).length == 0) { + if (mxUtils.trim(text).length === 0) { tmp.parentNode.removeChild(tmp); } @@ -689,7 +690,7 @@ let mxUtils = { indent = (indent != null) ? indent : ''; newline = (newline != null) ? newline : '\n'; - if (node.namespaceURI != null && node.namespaceURI != ns) { + if (node.namespaceURI != null && node.namespaceURI !== ns) { ns = node.namespaceURI; if (node.getAttribute('xmlns') == null) { @@ -697,9 +698,9 @@ let mxUtils = { } } - if (node.nodeType == mxConstants.NODETYPE_DOCUMENT) { + if (node.nodeType === mxConstants.NODETYPE_DOCUMENT) { result.push(mxUtils.getPrettyXml(node.documentElement, tab, indent, newline, ns)); - } else if (node.nodeType == mxConstants.NODETYPE_DOCUMENT_FRAGMENT) { + } else if (node.nodeType === mxConstants.NODETYPE_DOCUMENT_FRAGMENT) { let tmp = node.firstChild; if (tmp != null) { @@ -708,19 +709,19 @@ let mxUtils = { tmp = tmp.nextSibling; } } - } else if (node.nodeType == mxConstants.NODETYPE_COMMENT) { + } else if (node.nodeType === mxConstants.NODETYPE_COMMENT) { let value = mxUtils.getTextContent(node); if (value.length > 0) { result.push(indent + '' + newline); } - } else if (node.nodeType == mxConstants.NODETYPE_TEXT) { + } else if (node.nodeType === mxConstants.NODETYPE_TEXT) { let value = mxUtils.trim(mxUtils.getTextContent(node)); if (value.length > 0) { result.push(indent + mxUtils.htmlEntities(value, false) + newline); } - } else if (node.nodeType == mxConstants.NODETYPE_CDATA) { + } else if (node.nodeType === mxConstants.NODETYPE_CDATA) { let value = mxUtils.getTextContent(node); if (value.length > 0) { diff --git a/src/mxgraph/view/mxCellOverlay.js b/src/mxgraph/view/mxCellOverlay.js index c726a1526..bece6c482 100644 --- a/src/mxgraph/view/mxCellOverlay.js +++ b/src/mxgraph/view/mxCellOverlay.js @@ -6,6 +6,8 @@ import mxPoint from "../util/mxPoint"; import mxRectangle from "../util/mxRectangle"; +import mxEventSource from "../util/mxEventSource"; +import mxConstants from "../util/mxConstants"; class mxCellOverlay extends mxEventSource { /** diff --git a/src/mxgraph/view/mxGraph.js b/src/mxgraph/view/mxGraph.js index 64aae558d..12e251258 100644 --- a/src/mxgraph/view/mxGraph.js +++ b/src/mxgraph/view/mxGraph.js @@ -36,6 +36,7 @@ import mxMouseEvent from "../util/mxMouseEvent"; import mxResources from "../util/mxResources"; import mxGeometry from "../model/mxGeometry"; import mxCell from "../model/mxCell"; +import mxGraphModel from "../model/mxGraphModel"; class mxGraph extends mxEventSource { /** @@ -11703,7 +11704,7 @@ class mxGraph extends mxEventSource { * Installs the required language resources at class * loading time. */ -if (mxLoadResources) { +if (mxClient.mxLoadResources) { mxResources.add(mxClient.basePath + '/resources/graph'); } else { mxClient.defaultBundles.push(mxClient.basePath + '/resources/graph');