mxClient.js 24 KB

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