当前位置: 首页 > ds >正文

Drawio编辑器二次开发

‌ Drawio (现更名为 Diagrams.net )‌是一款完全免费的在线图表绘制工具,由 JGraph公司 开发。它支持创建多种类型的图表,包括流程图、组织结构图、UML图、网络拓扑图、思维导图等,适用于商务演示、软件设计等多种场景‌
官网:https://www.drawio.com/
本篇文章希望能给正在或者打算对drawio进行二开的同学提供些帮助!

drawio的底层是使用mxGraph库 https://jgraph.github.io/mxgraph/docs/js-api/files/view/mxCellEditor-js.html

1、github clone 代码

仓库地址:https://github.com/jgraph/drawio
在这里插入图片描述
我们主要修改的是webapp文件夹,这里存放的是前端静态资源文件

2、跑起来

vscode上下载live server插件,访问index.html

在这里插入图片描述
跑起来之后是这个样子的

3、在开发环境进行二次开发

在index.html里找到这段代码

	// Changes paths for local development environmentif (urlParams['dev'] == '1'){// Used to request grapheditor/mxgraph sources in dev modevar mxDevUrl = '';// Used to request draw.io sources in dev modevar drawDevUrl = '';var geBasePath = 'js/grapheditor';var mxBasePath = 'mxgraph/src';if (document.location.protocol == 'file:'){// Forces includes for dev environment in node.jsmxForceIncludes = true;}mxForceIncludes = false;mxscript(drawDevUrl + 'js/PreConfig.js');mxscript(drawDevUrl + 'js/diagramly/Init.js');mxscript(geBasePath + '/Init.js');mxscript(mxBasePath + '/mxClient.js');// Adds all JS code that depends on mxClient. This indirection via Devel.js is// required in some browsers to make sure mxClient.js (and the files that it// loads asynchronously) are available when the code loaded in Devel.js runs.mxscript(drawDevUrl + 'js/diagramly/Devel.js');// Electronif (mxIsElectron){mxscript('js/diagramly/DesktopLibrary.js');mxscript('js/diagramly/ElectronApp.js');}mxscript(drawDevUrl + 'js/PostConfig.js');}

只要在路径后面拼上 ?dev=1 即可

但是控制台出现了一个报错, 找不到js/diagramly/Init.js

这个可以在issues中找到作者给的解决方法
https://github.com/jgraph/drawio/discussions/5026

4、修改默认语言显示中文

找到 drawio\src\main\webapp\js\diagramly\Init.js 文件

var lang = urlParams['lang'];
....
window.mxLanguageMap = window.mxLanguageMap ||
{'i18n': '','id' : 'Bahasa Indonesia','ms' : 'Bahasa Melayu','bs' : 'Bosanski','bg' : 'Bulgarian','ca' : 'Català','cs' : 'Čeština','da' : 'Dansk','de' : 'Deutsch','et' : 'Eesti','en' : 'English','es' : 'Español','eu' : 'Euskara','fil' : 'Filipino','fr' : 'Français','gl' : 'Galego','it' : 'Italiano','hu' : 'Magyar','lt' : 'Lietuvių','lv' : 'Latviešu','nl' : 'Nederlands','no' : 'Norsk','pl' : 'Polski','pt-br' : 'Português (Brasil)','pt' : 'Português (Portugal)','ro' : 'Română','fi' : 'Suomi','sv' : 'Svenska','vi' : 'Tiếng Việt','tr' : 'Türkçe','el' : 'Ελληνικά','ru' : 'Русский','sr' : 'Српски','uk' : 'Українська','he' : 'עברית','ar' : 'العربية','fa' : 'فارسی','th' : 'ไทย','ko' : '한국어','ja' : '日本語','zh' : '简体中文','zh-tw' : '繁體中文'
};

在路径后面拼接上lang=zh 即可

5、打包

改完代码肯定是要打包部署的,不可能生产环境还用dev开发模式访问。
这里打包需要用到 apache-ant 工具

https://ant.apache.org/bindownload.cgi?login=from_csdn
具体怎么安装可以搜一下

cd到drawio\etc\build目录 执行ant

在这里插入图片描述
打包成功

6、简单示例

我们看一个hello word如何实现
在这里插入图片描述

function main(container)
{// Checks if the browser is supportedif (!mxClient.isBrowserSupported()){// Displays an error message if the browser is not supported.mxUtils.error('Browser is not supported!', 200, false);}else{// Disables the built-in context menumxEvent.disableContextMenu(container);// Creates the graph inside the given containervar graph = new mxGraph(container);// Enables rubberband selectionnew mxRubberband(graph);// Gets the default parent for inserting new cells. This// is normally the first child of the root (ie. layer 0).var parent = graph.getDefaultParent();// Adds cells to the model in a single stepgraph.getModel().beginUpdate();try{var v1 = graph.insertVertex(parent, null, 'Hello,', 20, 20, 80, 30);var v2 = graph.insertVertex(parent, null, 'World!', 200, 150, 80, 30);var e1 = graph.insertEdge(parent, null, '', v1, v2);}finally{// Updates the displaygraph.getModel().endUpdate();}}
};
http://www.xdnf.cn/news/10112.html

相关文章:

  • 【pytorch学习】土堆pytorch学习笔记2
  • 【Linux】权限相关指令
  • Axure疑难杂症:中继器新增数据时如何上传并存储图片(玩转中继器)
  • 【仿生机器人系统设计】涉及到的伦理与安全问题
  • 数据基座觉醒!大数据+AI如何重构企业智能决策金字塔(上)
  • 代码随想录打卡|Day53 图论(Floyd 算法精讲 、A * 算法精讲 (A star算法)、最短路算法总结篇、图论总结 )
  • 历年武汉大学计算机保研上机真题
  • 服务器液冷:突破散热瓶颈,驱动算力革命的“冷静”引擎
  • 美国服务器文件系统的基本功能和命令
  • ansible-playbook 进阶 接上一章内容
  • dart实现单client连接的grpc server (以ip地址作判断)
  • Yum配置第三方源与本地源详解
  • 日常--OBS+mediamtx实现本地RTMP推流环境搭建(详细图文)
  • RPG17.蓝图函数库与轻重攻击连击
  • C++ 5.29 dddd
  • 【深度剖析】义齿定制行业数字化转型模式创新研究(上篇2:痛点和难点分析)
  • AI智能监控系统:赋能厂区安全管理的数智化革新
  • [Dify] 如何应对明道云API数据过长带来的Token超限问题
  • OAuth协议中的Token、Ticket
  • (NAT64)IPv6网络用户访问IPv4网络服务器(动态映射方式)
  • Linux服务器时间同步——Chronyd
  • MyBatis动态SQL
  • Baklib知识中台驱动业务创新
  • 【HarmonyOS 5】鸿蒙中的UIAbility详解(二)
  • 深化生态协同,宁盾身份域管完成与拓波软件兼容互认证
  • 19、Python字符串高阶实战:转义字符深度解析、高效拼接与输入处理技巧
  • 2.2.1 05年T4
  • Python 连接 MinIO (一)
  • wsl2 docker重启后没了
  • Cobra CLI 工具使用指南:构建 Go 语言命令行应用的完整教程