drawio-demo.js 2.5 KB

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