drawio-demo.js 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. // Extends EditorUi to update I/O action states based on availability of backend
  2. (function () {
  3. var editorUiInit = EditorUi.prototype.init;
  4. EditorUi.prototype.init = function () {
  5. editorUiInit.apply(this, arguments);
  6. };
  7. // Adds required resources (disables loading of fallback properties, this can only
  8. // be used if we know that all keys are defined in the language specific file)
  9. mxResources.loadDefaultBundle = false;
  10. var bundle = mxResources.getDefaultBundle(mxLanguage);
  11. // Fixes possible asynchronous requests
  12. mxUtils.getAll([bundle, '/static/cherry/drawio_demo/default.xml'], function (xhr) {
  13. // Adds bundle text to resources
  14. mxResources.parse(xhr[0].getText());
  15. // Configures the default graph theme
  16. var themes = new Object();
  17. themes[Graph.prototype.defaultThemeName] = xhr[1].getDocumentElement();
  18. // Main
  19. window.editorUIInstance = new EditorUi(new Editor(false, themes));
  20. try {
  21. addPostMessageListener(editorUIInstance.editor);
  22. } catch (error) {
  23. console.log(error);
  24. }
  25. window.parent.postMessage({ eventName: 'ready', value: '' }, '*');
  26. }, function () {
  27. document.body.innerHTML = '<center style="margin-top:10%;">Error loading resource files. Please check browser console.</center>';
  28. });
  29. })();
  30. function addPostMessageListener(graphEditor) {
  31. window.addEventListener('message', function (event) {
  32. if (!event.data || !event.data.eventName) {
  33. return
  34. }
  35. switch (event.data.eventName) {
  36. case 'setData':
  37. var value = event.data.value;
  38. var doc = mxUtils.parseXml(value);
  39. var documentName = 'cherry-drawio-' + new Date().getTime();
  40. editorUIInstance.editor.setGraphXml(null);
  41. graphEditor.graph.importGraphModel(doc.documentElement);
  42. graphEditor.setFilename(documentName);
  43. window.parent.postMessage({ eventName: 'setData:success', value: '' }, '*');
  44. break;
  45. case 'getData':
  46. editorUIInstance.editor.graph.stopEditing();
  47. var xmlData = mxUtils.getXml(editorUIInstance.editor.getGraphXml());
  48. editorUIInstance.exportImage(2, "#ffffff", true, null, true, 50, null, "png", function (base64, filename) {
  49. window.parent.postMessage({
  50. mceAction: 'getData:success',
  51. eventName: 'getData:success',
  52. value: {
  53. xmlData: xmlData,
  54. base64: base64,
  55. }
  56. }, '*');
  57. })
  58. break;
  59. case 'ready?':
  60. window.parent.postMessage({ eventName: 'ready', value: '' }, '*');
  61. break;
  62. default:
  63. break;
  64. }
  65. });
  66. }