mxClient.js 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724
  1. /**
  2. * Copyright (c) 2006-2017, JGraph Ltd
  3. * Copyright (c) 2006-2017, Gaudenz Alder
  4. */
  5. var mxClient =
  6. {
  7. /**
  8. * Class: mxClient
  9. *
  10. * Bootstrapping mechanism for the mxGraph thin client. The production version
  11. * of this file contains all code required to run the mxGraph thin client, as
  12. * well as global constants to identify the browser and operating system in
  13. * use. You may have to load chrome://global/content/contentAreaUtils.js in
  14. * your page to disable certain security restrictions in Mozilla.
  15. *
  16. * Variable: VERSION
  17. *
  18. * Contains the current version of the mxGraph library. The strings that
  19. * communicate versions of mxGraph use the following format.
  20. *
  21. * versionMajor.versionMinor.buildNumber.revisionNumber
  22. *
  23. * Current version is @MXGRAPH-VERSION@.
  24. */
  25. VERSION: '@MXGRAPH-VERSION@',
  26. /**
  27. * Variable: IS_IE
  28. *
  29. * True if the current browser is Internet Explorer 10 or below. Use <mxClient.IS_IE11>
  30. * to detect IE 11.
  31. */
  32. IS_IE: navigator.userAgent != null && navigator.userAgent.indexOf('MSIE') >= 0,
  33. /**
  34. * Variable: IS_IE11
  35. *
  36. * True if the current browser is Internet Explorer 11.x.
  37. */
  38. IS_IE11: navigator.userAgent != null && !!navigator.userAgent.match(/Trident\/7\./),
  39. /**
  40. * Variable: IS_EDGE
  41. *
  42. * True if the current browser is Microsoft Edge.
  43. */
  44. IS_EDGE: navigator.userAgent != null && !!navigator.userAgent.match(/Edge\//),
  45. /**
  46. * Variable: IS_EM
  47. *
  48. * True if the browser is IE11 in enterprise mode (IE8 standards mode).
  49. */
  50. IS_EM: 'spellcheck' in document.createElement('textarea') && document.documentMode == 8,
  51. /**
  52. * Variable: VML_PREFIX
  53. *
  54. * Prefix for VML namespace in node names. Default is 'v'.
  55. */
  56. VML_PREFIX: 'v',
  57. /**
  58. * Variable: OFFICE_PREFIX
  59. *
  60. * Prefix for VML office namespace in node names. Default is 'o'.
  61. */
  62. OFFICE_PREFIX: 'o',
  63. /**
  64. * Variable: IS_NS
  65. *
  66. * True if the current browser is Netscape (including Firefox).
  67. */
  68. IS_NS: navigator.userAgent != null &&
  69. navigator.userAgent.indexOf('Mozilla/') >= 0 &&
  70. navigator.userAgent.indexOf('MSIE') < 0 &&
  71. navigator.userAgent.indexOf('Edge/') < 0,
  72. /**
  73. * Variable: IS_OP
  74. *
  75. * True if the current browser is Opera.
  76. */
  77. IS_OP: navigator.userAgent != null &&
  78. (navigator.userAgent.indexOf('Opera/') >= 0 ||
  79. navigator.userAgent.indexOf('OPR/') >= 0),
  80. /**
  81. * Variable: IS_OT
  82. *
  83. * True if -o-transform is available as a CSS style, ie for Opera browsers
  84. * based on a Presto engine with version 2.5 or later.
  85. */
  86. IS_OT: navigator.userAgent != null &&
  87. navigator.userAgent.indexOf('Presto/') >= 0 &&
  88. navigator.userAgent.indexOf('Presto/2.4.') < 0 &&
  89. navigator.userAgent.indexOf('Presto/2.3.') < 0 &&
  90. navigator.userAgent.indexOf('Presto/2.2.') < 0 &&
  91. navigator.userAgent.indexOf('Presto/2.1.') < 0 &&
  92. navigator.userAgent.indexOf('Presto/2.0.') < 0 &&
  93. navigator.userAgent.indexOf('Presto/1.') < 0,
  94. /**
  95. * Variable: IS_SF
  96. *
  97. * True if the current browser is Safari.
  98. */
  99. IS_SF: /Apple Computer, Inc/.test(navigator.vendor),
  100. /**
  101. * Variable: IS_ANDROID
  102. *
  103. * Returns true if the user agent contains Android.
  104. */
  105. IS_ANDROID: navigator.appVersion.indexOf('Android') >= 0,
  106. /**
  107. * Variable: IS_IOS
  108. *
  109. * Returns true if the user agent is an iPad, iPhone or iPod.
  110. */
  111. IS_IOS: (/iP(hone|od|ad)/.test(navigator.platform)) || (navigator.userAgent.match(/Mac/) &&
  112. navigator.maxTouchPoints && navigator.maxTouchPoints > 2),
  113. /**
  114. * Variable: IS_WEBVIEW
  115. *
  116. * Returns true if the user agent is a WebView [inside mobile app].
  117. */
  118. IS_WEBVIEW: (/((iPhone|iPod|iPad).*AppleWebKit(?!.*Version)|; wv)/i.test(navigator.userAgent)),
  119. /**
  120. * Variable: IS_GC
  121. *
  122. * True if the current browser is Google Chrome.
  123. */
  124. IS_GC: /Google Inc/.test(navigator.vendor),
  125. /**
  126. * Variable: IS_CHROMEAPP
  127. *
  128. * True if the this is running inside a Chrome App.
  129. */
  130. IS_CHROMEAPP: window.chrome != null && chrome.app != null && chrome.app.runtime != null,
  131. /**
  132. * Variable: IS_FF
  133. *
  134. * True if the current browser is Firefox.
  135. */
  136. IS_FF: navigator.userAgent.toLowerCase().indexOf('firefox') > -1,
  137. /**
  138. * Variable: IS_MT
  139. *
  140. * True if -moz-transform is available as a CSS style. This is the case
  141. * for all Firefox-based browsers newer than or equal 3, such as Camino,
  142. * Iceweasel, Seamonkey and Iceape.
  143. */
  144. IS_MT: (navigator.userAgent.indexOf('Firefox/') >= 0 &&
  145. navigator.userAgent.indexOf('Firefox/1.') < 0 &&
  146. navigator.userAgent.indexOf('Firefox/2.') < 0) ||
  147. (navigator.userAgent.indexOf('Iceweasel/') >= 0 &&
  148. navigator.userAgent.indexOf('Iceweasel/1.') < 0 &&
  149. navigator.userAgent.indexOf('Iceweasel/2.') < 0) ||
  150. (navigator.userAgent.indexOf('SeaMonkey/') >= 0 &&
  151. navigator.userAgent.indexOf('SeaMonkey/1.') < 0) ||
  152. (navigator.userAgent.indexOf('Iceape/') >= 0 &&
  153. navigator.userAgent.indexOf('Iceape/1.') < 0),
  154. /**
  155. * Variable: IS_SVG
  156. *
  157. * True if the browser supports SVG.
  158. */
  159. IS_SVG: navigator.appName.toUpperCase() != 'MICROSOFT INTERNET EXPLORER',
  160. /**
  161. * Variable: NO_FO
  162. *
  163. * True if foreignObject support is not available. This is the case for
  164. * Opera, older SVG-based browsers and all versions of IE.
  165. */
  166. NO_FO: !document.createElementNS || document.createElementNS('http://www.w3.org/2000/svg',
  167. 'foreignObject').toString() !== '[object SVGForeignObjectElement]' ||
  168. navigator.userAgent.indexOf('Opera/') >= 0,
  169. /**
  170. * Variable: IS_WIN
  171. *
  172. * True if the client is a Windows.
  173. */
  174. IS_WIN: navigator.appVersion.indexOf('Win') > 0,
  175. /**
  176. * Variable: IS_MAC
  177. *
  178. * True if the client is a Mac.
  179. */
  180. IS_MAC: navigator.appVersion.indexOf('Mac') > 0,
  181. /**
  182. * Variable: IS_CHROMEOS
  183. *
  184. * True if the client is a Chrome OS.
  185. */
  186. IS_CHROMEOS: /\bCrOS\b/.test(navigator.appVersion),
  187. /**
  188. * Variable: IS_LINUX
  189. *
  190. * True if the client is Linux.
  191. */
  192. IS_LINUX: /\bLinux\b/.test(navigator.appVersion),
  193. /**
  194. * Variable: IS_TOUCH
  195. *
  196. * True if this device supports touchstart/-move/-end events (Apple iOS,
  197. * Android, Chromebook and Chrome Browser on touch-enabled devices).
  198. */
  199. IS_TOUCH: 'ontouchstart' in document.documentElement,
  200. /**
  201. * Variable: IS_POINTER
  202. *
  203. * True if this device supports Microsoft pointer events (always false on Macs).
  204. */
  205. IS_POINTER: window.PointerEvent != null && !(navigator.appVersion.indexOf('Mac') > 0),
  206. /**
  207. * Variable: IS_LOCAL
  208. *
  209. * True if the documents location does not start with http:// or https://.
  210. */
  211. IS_LOCAL: document.location.href.indexOf('http://') < 0 &&
  212. document.location.href.indexOf('https://') < 0,
  213. /**
  214. * Variable: defaultBundles
  215. *
  216. * Contains the base names of the default bundles if mxLoadResources is false.
  217. */
  218. defaultBundles: [],
  219. /**
  220. * Function: isBrowserSupported
  221. *
  222. * Returns true if the current browser is supported, that is, if
  223. * <mxClient.IS_SVG> is true.
  224. *
  225. * Example:
  226. *
  227. * (code)
  228. * if (!mxClient.isBrowserSupported())
  229. * {
  230. * mxUtils.error('Browser is not supported!', 200, false);
  231. * }
  232. * (end)
  233. */
  234. isBrowserSupported: function()
  235. {
  236. return mxClient.IS_SVG;
  237. },
  238. /**
  239. * Function: link
  240. *
  241. * Adds a link node to the head of the document. Use this
  242. * to add a stylesheet to the page as follows:
  243. *
  244. * (code)
  245. * mxClient.link('stylesheet', filename);
  246. * (end)
  247. *
  248. * where filename is the (relative) URL of the stylesheet. The charset
  249. * is hardcoded to ISO-8859-1 and the type is text/css.
  250. *
  251. * Parameters:
  252. *
  253. * rel - String that represents the rel attribute of the link node.
  254. * href - String that represents the href attribute of the link node.
  255. * doc - Optional parent document of the link node.
  256. * id - unique id for the link element to check if it already exists
  257. */
  258. link: function(rel, href, doc, id)
  259. {
  260. doc = doc || document;
  261. var link = doc.createElement('link');
  262. link.setAttribute('rel', rel);
  263. link.setAttribute('href', href);
  264. link.setAttribute('charset', 'UTF-8');
  265. link.setAttribute('type', 'text/css');
  266. if (id)
  267. {
  268. link.setAttribute('id', id);
  269. }
  270. var head = doc.getElementsByTagName('head')[0];
  271. head.appendChild(link);
  272. },
  273. /**
  274. * Function: loadResources
  275. *
  276. * Helper method to load the default bundles if mxLoadResources is false.
  277. *
  278. * Parameters:
  279. *
  280. * fn - Function to call after all resources have been loaded.
  281. * lan - Optional string to pass to <mxResources.add>.
  282. */
  283. loadResources: function(fn, lan)
  284. {
  285. var pending = mxClient.defaultBundles.length;
  286. function callback()
  287. {
  288. if (--pending == 0)
  289. {
  290. fn();
  291. }
  292. }
  293. for (var i = 0; i < mxClient.defaultBundles.length; i++)
  294. {
  295. mxResources.add(mxClient.defaultBundles[i], lan, callback);
  296. }
  297. },
  298. /**
  299. * Function: include
  300. *
  301. * Dynamically adds a script node to the document header.
  302. *
  303. * In production environments, the includes are resolved in the mxClient.js
  304. * file to reduce the number of requests required for client startup. This
  305. * function should only be used in development environments, but not in
  306. * production systems.
  307. */
  308. include: function(src)
  309. {
  310. document.write('<script src="'+src+'"></script>');
  311. }
  312. };
  313. /**
  314. * Variable: mxLoadResources
  315. *
  316. * Optional global config variable to toggle loading of the two resource files
  317. * in <mxGraph> and <mxEditor>. Default is true. NOTE: This is a global variable,
  318. * not a variable of mxClient. If this is false, you can use <mxClient.loadResources>
  319. * with its callback to load the default bundles asynchronously.
  320. *
  321. * (code)
  322. * <script type="text/javascript">
  323. * var mxLoadResources = false;
  324. * </script>
  325. * <script type="text/javascript" src="/path/to/core/directory/js/mxClient.js"></script>
  326. * (end)
  327. */
  328. if (typeof(mxLoadResources) == 'undefined')
  329. {
  330. mxLoadResources = true;
  331. }
  332. /**
  333. * Variable: mxForceIncludes
  334. *
  335. * Optional global config variable to force loading the JavaScript files in
  336. * development mode. Default is undefined. NOTE: This is a global variable,
  337. * not a variable of mxClient.
  338. *
  339. * (code)
  340. * <script type="text/javascript">
  341. * var mxForceIncludes = true;
  342. * </script>
  343. * <script type="text/javascript" src="/path/to/core/directory/js/mxClient.js"></script>
  344. * (end)
  345. */
  346. if (typeof(mxForceIncludes) == 'undefined')
  347. {
  348. mxForceIncludes = false;
  349. }
  350. /**
  351. * Variable: mxResourceExtension
  352. *
  353. * Optional global config variable to specify the extension of resource files.
  354. * Default is true. NOTE: This is a global variable, not a variable of mxClient.
  355. *
  356. * (code)
  357. * <script type="text/javascript">
  358. * var mxResourceExtension = '.txt';
  359. * </script>
  360. * <script type="text/javascript" src="/path/to/core/directory/js/mxClient.js"></script>
  361. * (end)
  362. */
  363. if (typeof(mxResourceExtension) == 'undefined')
  364. {
  365. mxResourceExtension = '.txt';
  366. }
  367. /**
  368. * Variable: mxLoadStylesheets
  369. *
  370. * Optional global config variable to toggle loading of the CSS files when
  371. * the library is initialized. Default is true. NOTE: This is a global variable,
  372. * not a variable of mxClient.
  373. *
  374. * (code)
  375. * <script type="text/javascript">
  376. * var mxLoadStylesheets = false;
  377. * </script>
  378. * <script type="text/javascript" src="/path/to/core/directory/js/mxClient.js"></script>
  379. * (end)
  380. */
  381. if (typeof(mxLoadStylesheets) == 'undefined')
  382. {
  383. mxLoadStylesheets = true;
  384. }
  385. /**
  386. * Variable: basePath
  387. *
  388. * Basepath for all URLs in the core without trailing slash. Default is '.'.
  389. * Set mxBasePath prior to loading the mxClient library as follows to override
  390. * this setting:
  391. *
  392. * (code)
  393. * <script type="text/javascript">
  394. * mxBasePath = '/path/to/core/directory';
  395. * </script>
  396. * <script type="text/javascript" src="/path/to/core/directory/js/mxClient.js"></script>
  397. * (end)
  398. *
  399. * When using a relative path, the path is relative to the URL of the page that
  400. * contains the assignment. Trailing slashes are automatically removed.
  401. */
  402. if (typeof(mxBasePath) != 'undefined' && mxBasePath.length > 0)
  403. {
  404. // Adds a trailing slash if required
  405. if (mxBasePath.substring(mxBasePath.length - 1) == '/')
  406. {
  407. mxBasePath = mxBasePath.substring(0, mxBasePath.length - 1);
  408. }
  409. mxClient.basePath = mxBasePath;
  410. }
  411. else
  412. {
  413. mxClient.basePath = '.';
  414. }
  415. /**
  416. * Variable: imageBasePath
  417. *
  418. * Basepath for all images URLs in the core without trailing slash. Default is
  419. * <mxClient.basePath> + '/images'. Set mxImageBasePath prior to loading the
  420. * mxClient library as follows to override this setting:
  421. *
  422. * (code)
  423. * <script type="text/javascript">
  424. * mxImageBasePath = '/path/to/image/directory';
  425. * </script>
  426. * <script type="text/javascript" src="/path/to/core/directory/js/mxClient.js"></script>
  427. * (end)
  428. *
  429. * When using a relative path, the path is relative to the URL of the page that
  430. * contains the assignment. Trailing slashes are automatically removed.
  431. */
  432. if (typeof(mxImageBasePath) != 'undefined' && mxImageBasePath.length > 0)
  433. {
  434. // Adds a trailing slash if required
  435. if (mxImageBasePath.substring(mxImageBasePath.length - 1) == '/')
  436. {
  437. mxImageBasePath = mxImageBasePath.substring(0, mxImageBasePath.length - 1);
  438. }
  439. mxClient.imageBasePath = mxImageBasePath;
  440. }
  441. else
  442. {
  443. mxClient.imageBasePath = 'images';
  444. }
  445. /**
  446. * Variable: language
  447. *
  448. * Defines the language of the client, eg. en for english, de for german etc.
  449. * The special value 'none' will disable all built-in internationalization and
  450. * resource loading. See <mxResources.getSpecialBundle> for handling identifiers
  451. * with and without a dash.
  452. *
  453. * Set mxLanguage prior to loading the mxClient library as follows to override
  454. * this setting:
  455. *
  456. * (code)
  457. * <script type="text/javascript">
  458. * mxLanguage = 'en';
  459. * </script>
  460. * <script type="text/javascript" src="js/mxClient.js"></script>
  461. * (end)
  462. *
  463. * If internationalization is disabled, then the following variables should be
  464. * overridden to reflect the current language of the system. These variables are
  465. * cleared when i18n is disabled.
  466. * <mxEditor.askZoomResource>, <mxEditor.lastSavedResource>,
  467. * <mxEditor.currentFileResource>, <mxEditor.propertiesResource>,
  468. * <mxEditor.tasksResource>, <mxEditor.helpResource>, <mxEditor.outlineResource>,
  469. * <mxElbowEdgeHandler.doubleClickOrientationResource>, <mxUtils.errorResource>,
  470. * <mxUtils.closeResource>, <mxGraphSelectionModel.doneResource>,
  471. * <mxGraphSelectionModel.updatingSelectionResource>, <mxGraphView.doneResource>,
  472. * <mxGraphView.updatingDocumentResource>, <mxCellRenderer.collapseExpandResource>,
  473. * <mxGraph.containsValidationErrorsResource> and
  474. * <mxGraph.alreadyConnectedResource>.
  475. */
  476. if (typeof(mxLanguage) != 'undefined' && mxLanguage != null)
  477. {
  478. mxClient.language = mxLanguage;
  479. }
  480. else
  481. {
  482. mxClient.language = (mxClient.IS_IE) ? navigator.userLanguage : navigator.language;
  483. }
  484. /**
  485. * Variable: defaultLanguage
  486. *
  487. * Defines the default language which is used in the common resource files. Any
  488. * resources for this language will only load the common resource file, but not
  489. * the language-specific resource file. Default is 'en'.
  490. *
  491. * Set mxDefaultLanguage prior to loading the mxClient library as follows to override
  492. * this setting:
  493. *
  494. * (code)
  495. * <script type="text/javascript">
  496. * mxDefaultLanguage = 'de';
  497. * </script>
  498. * <script type="text/javascript" src="js/mxClient.js"></script>
  499. * (end)
  500. */
  501. if (typeof(mxDefaultLanguage) != 'undefined' && mxDefaultLanguage != null)
  502. {
  503. mxClient.defaultLanguage = mxDefaultLanguage;
  504. }
  505. else
  506. {
  507. mxClient.defaultLanguage = 'en';
  508. }
  509. // Adds all required stylesheets and namespaces
  510. if (mxLoadStylesheets)
  511. {
  512. mxClient.link('stylesheet', 'mxgraph/css/common.css');
  513. }
  514. /**
  515. * Variable: languages
  516. *
  517. * Defines the optional array of all supported language extensions. The default
  518. * language does not have to be part of this list. See
  519. * <mxResources.isLanguageSupported>.
  520. *
  521. * (code)
  522. * <script type="text/javascript">
  523. * mxLanguages = ['de', 'it', 'fr'];
  524. * </script>
  525. * <script type="text/javascript" src="js/mxClient.js"></script>
  526. * (end)
  527. *
  528. * This is used to avoid unnecessary requests to language files, ie. if a 404
  529. * will be returned.
  530. */
  531. if (typeof(mxLanguages) != 'undefined' && mxLanguages != null)
  532. {
  533. mxClient.languages = mxLanguages;
  534. }
  535. // PREPROCESSOR-REMOVE-START
  536. // If script is loaded via CommonJS, do not write <script> tags to the page
  537. // for dependencies. These are already included in the build.
  538. if (mxForceIncludes || !(typeof module === 'object' && module.exports != null))
  539. {
  540. // PREPROCESSOR-REMOVE-END
  541. mxClient.include(mxClient.basePath + '/util/mxLog.js');
  542. mxClient.include(mxClient.basePath + '/util/mxObjectIdentity.js');
  543. mxClient.include(mxClient.basePath + '/util/mxDictionary.js');
  544. mxClient.include(mxClient.basePath + '/util/mxResources.js');
  545. mxClient.include(mxClient.basePath + '/util/mxPoint.js');
  546. mxClient.include(mxClient.basePath + '/util/mxRectangle.js');
  547. mxClient.include(mxClient.basePath + '/util/mxEffects.js');
  548. mxClient.include(mxClient.basePath + '/util/mxUtils.js');
  549. mxClient.include(mxClient.basePath + '/util/mxConstants.js');
  550. mxClient.include(mxClient.basePath + '/util/mxEventObject.js');
  551. mxClient.include(mxClient.basePath + '/util/mxMouseEvent.js');
  552. mxClient.include(mxClient.basePath + '/util/mxEventSource.js');
  553. mxClient.include(mxClient.basePath + '/util/mxEvent.js');
  554. mxClient.include(mxClient.basePath + '/util/mxXmlRequest.js');
  555. mxClient.include(mxClient.basePath + '/util/mxClipboard.js');
  556. mxClient.include(mxClient.basePath + '/util/mxWindow.js');
  557. mxClient.include(mxClient.basePath + '/util/mxForm.js');
  558. mxClient.include(mxClient.basePath + '/util/mxImage.js');
  559. mxClient.include(mxClient.basePath + '/util/mxDivResizer.js');
  560. mxClient.include(mxClient.basePath + '/util/mxDragSource.js');
  561. mxClient.include(mxClient.basePath + '/util/mxToolbar.js');
  562. mxClient.include(mxClient.basePath + '/util/mxUndoableEdit.js');
  563. mxClient.include(mxClient.basePath + '/util/mxUndoManager.js');
  564. mxClient.include(mxClient.basePath + '/util/mxUrlConverter.js');
  565. mxClient.include(mxClient.basePath + '/util/mxPanningManager.js');
  566. mxClient.include(mxClient.basePath + '/util/mxPopupMenu.js');
  567. mxClient.include(mxClient.basePath + '/util/mxAutoSaveManager.js');
  568. mxClient.include(mxClient.basePath + '/util/mxAnimation.js');
  569. mxClient.include(mxClient.basePath + '/util/mxMorphing.js');
  570. mxClient.include(mxClient.basePath + '/util/mxImageBundle.js');
  571. mxClient.include(mxClient.basePath + '/util/mxImageExport.js');
  572. mxClient.include(mxClient.basePath + '/util/mxAbstractCanvas2D.js');
  573. mxClient.include(mxClient.basePath + '/util/mxXmlCanvas2D.js');
  574. mxClient.include(mxClient.basePath + '/util/mxSvgCanvas2D.js');
  575. mxClient.include(mxClient.basePath + '/util/mxGuide.js');
  576. mxClient.include(mxClient.basePath + '/shape/mxShape.js');
  577. mxClient.include(mxClient.basePath + '/shape/mxStencil.js');
  578. mxClient.include(mxClient.basePath + '/shape/mxStencilRegistry.js');
  579. mxClient.include(mxClient.basePath + '/shape/mxMarker.js');
  580. mxClient.include(mxClient.basePath + '/shape/mxActor.js');
  581. mxClient.include(mxClient.basePath + '/shape/mxCloud.js');
  582. mxClient.include(mxClient.basePath + '/shape/mxRectangleShape.js');
  583. mxClient.include(mxClient.basePath + '/shape/mxEllipse.js');
  584. mxClient.include(mxClient.basePath + '/shape/mxDoubleEllipse.js');
  585. mxClient.include(mxClient.basePath + '/shape/mxRhombus.js');
  586. mxClient.include(mxClient.basePath + '/shape/mxPolyline.js');
  587. mxClient.include(mxClient.basePath + '/shape/mxArrow.js');
  588. mxClient.include(mxClient.basePath + '/shape/mxArrowConnector.js');
  589. mxClient.include(mxClient.basePath + '/shape/mxText.js');
  590. mxClient.include(mxClient.basePath + '/shape/mxTriangle.js');
  591. mxClient.include(mxClient.basePath + '/shape/mxHexagon.js');
  592. mxClient.include(mxClient.basePath + '/shape/mxLine.js');
  593. mxClient.include(mxClient.basePath + '/shape/mxImageShape.js');
  594. mxClient.include(mxClient.basePath + '/shape/mxLabel.js');
  595. mxClient.include(mxClient.basePath + '/shape/mxCylinder.js');
  596. mxClient.include(mxClient.basePath + '/shape/mxConnector.js');
  597. mxClient.include(mxClient.basePath + '/shape/mxSwimlane.js');
  598. mxClient.include(mxClient.basePath + '/layout/mxGraphLayout.js');
  599. mxClient.include(mxClient.basePath + '/layout/mxStackLayout.js');
  600. mxClient.include(mxClient.basePath + '/layout/mxPartitionLayout.js');
  601. mxClient.include(mxClient.basePath + '/layout/mxCompactTreeLayout.js');
  602. mxClient.include(mxClient.basePath + '/layout/mxRadialTreeLayout.js');
  603. mxClient.include(mxClient.basePath + '/layout/mxFastOrganicLayout.js');
  604. mxClient.include(mxClient.basePath + '/layout/mxCircleLayout.js');
  605. mxClient.include(mxClient.basePath + '/layout/mxParallelEdgeLayout.js');
  606. mxClient.include(mxClient.basePath + '/layout/mxCompositeLayout.js');
  607. mxClient.include(mxClient.basePath + '/layout/mxEdgeLabelLayout.js');
  608. mxClient.include(mxClient.basePath + '/layout/hierarchical/model/mxGraphAbstractHierarchyCell.js');
  609. mxClient.include(mxClient.basePath + '/layout/hierarchical/model/mxGraphHierarchyNode.js');
  610. mxClient.include(mxClient.basePath + '/layout/hierarchical/model/mxGraphHierarchyEdge.js');
  611. mxClient.include(mxClient.basePath + '/layout/hierarchical/model/mxGraphHierarchyModel.js');
  612. mxClient.include(mxClient.basePath + '/layout/hierarchical/model/mxSwimlaneModel.js');
  613. mxClient.include(mxClient.basePath + '/layout/hierarchical/stage/mxHierarchicalLayoutStage.js');
  614. mxClient.include(mxClient.basePath + '/layout/hierarchical/stage/mxMedianHybridCrossingReduction.js');
  615. mxClient.include(mxClient.basePath + '/layout/hierarchical/stage/mxMinimumCycleRemover.js');
  616. mxClient.include(mxClient.basePath + '/layout/hierarchical/stage/mxCoordinateAssignment.js');
  617. mxClient.include(mxClient.basePath + '/layout/hierarchical/stage/mxSwimlaneOrdering.js');
  618. mxClient.include(mxClient.basePath + '/layout/hierarchical/mxHierarchicalLayout.js');
  619. mxClient.include(mxClient.basePath + '/layout/hierarchical/mxSwimlaneLayout.js');
  620. mxClient.include(mxClient.basePath + '/model/mxGraphModel.js');
  621. mxClient.include(mxClient.basePath + '/model/mxCell.js');
  622. mxClient.include(mxClient.basePath + '/model/mxGeometry.js');
  623. mxClient.include(mxClient.basePath + '/model/mxCellPath.js');
  624. mxClient.include(mxClient.basePath + '/view/mxPerimeter.js');
  625. mxClient.include(mxClient.basePath + '/view/mxPrintPreview.js');
  626. mxClient.include(mxClient.basePath + '/view/mxStylesheet.js');
  627. mxClient.include(mxClient.basePath + '/view/mxCellState.js');
  628. mxClient.include(mxClient.basePath + '/view/mxGraphSelectionModel.js');
  629. mxClient.include(mxClient.basePath + '/view/mxCellEditor.js');
  630. mxClient.include(mxClient.basePath + '/view/mxCellRenderer.js');
  631. mxClient.include(mxClient.basePath + '/view/mxEdgeStyle.js');
  632. mxClient.include(mxClient.basePath + '/view/mxStyleRegistry.js');
  633. mxClient.include(mxClient.basePath + '/view/mxGraphView.js');
  634. mxClient.include(mxClient.basePath + '/view/mxGraph.js');
  635. mxClient.include(mxClient.basePath + '/view/mxCellOverlay.js');
  636. mxClient.include(mxClient.basePath + '/view/mxOutline.js');
  637. mxClient.include(mxClient.basePath + '/view/mxMultiplicity.js');
  638. mxClient.include(mxClient.basePath + '/view/mxLayoutManager.js');
  639. mxClient.include(mxClient.basePath + '/view/mxSwimlaneManager.js');
  640. mxClient.include(mxClient.basePath + '/view/mxTemporaryCellStates.js');
  641. mxClient.include(mxClient.basePath + '/view/mxCellStatePreview.js');
  642. mxClient.include(mxClient.basePath + '/view/mxConnectionConstraint.js');
  643. mxClient.include(mxClient.basePath + '/handler/mxGraphHandler.js');
  644. mxClient.include(mxClient.basePath + '/handler/mxPanningHandler.js');
  645. mxClient.include(mxClient.basePath + '/handler/mxPopupMenuHandler.js');
  646. mxClient.include(mxClient.basePath + '/handler/mxCellMarker.js');
  647. mxClient.include(mxClient.basePath + '/handler/mxSelectionCellsHandler.js');
  648. mxClient.include(mxClient.basePath + '/handler/mxConnectionHandler.js');
  649. mxClient.include(mxClient.basePath + '/handler/mxConstraintHandler.js');
  650. mxClient.include(mxClient.basePath + '/handler/mxRubberband.js');
  651. mxClient.include(mxClient.basePath + '/handler/mxHandle.js');
  652. mxClient.include(mxClient.basePath + '/handler/mxVertexHandler.js');
  653. mxClient.include(mxClient.basePath + '/handler/mxEdgeHandler.js');
  654. mxClient.include(mxClient.basePath + '/handler/mxElbowEdgeHandler.js');
  655. mxClient.include(mxClient.basePath + '/handler/mxEdgeSegmentHandler.js');
  656. mxClient.include(mxClient.basePath + '/handler/mxKeyHandler.js');
  657. mxClient.include(mxClient.basePath + '/handler/mxTooltipHandler.js');
  658. mxClient.include(mxClient.basePath + '/handler/mxCellTracker.js');
  659. mxClient.include(mxClient.basePath + '/handler/mxCellHighlight.js');
  660. mxClient.include(mxClient.basePath + '/io/mxCodecRegistry.js');
  661. mxClient.include(mxClient.basePath + '/io/mxCodec.js');
  662. mxClient.include(mxClient.basePath + '/io/mxObjectCodec.js');
  663. mxClient.include(mxClient.basePath + '/io/mxCellCodec.js');
  664. mxClient.include(mxClient.basePath + '/io/mxModelCodec.js');
  665. mxClient.include(mxClient.basePath + '/io/mxRootChangeCodec.js');
  666. mxClient.include(mxClient.basePath + '/io/mxChildChangeCodec.js');
  667. mxClient.include(mxClient.basePath + '/io/mxTerminalChangeCodec.js');
  668. mxClient.include(mxClient.basePath + '/io/mxGenericChangeCodec.js');
  669. mxClient.include(mxClient.basePath + '/io/mxGraphCodec.js');
  670. mxClient.include(mxClient.basePath + '/io/mxGraphViewCodec.js');
  671. mxClient.include(mxClient.basePath + '/io/mxStylesheetCodec.js');
  672. // PREPROCESSOR-REMOVE-START
  673. }
  674. // PREPROCESSOR-REMOVE-END