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里找到这段代码

typescript 复制代码
	// Changes paths for local development environment
		if (urlParams['dev'] == '1')
		{
			// Used to request grapheditor/mxgraph sources in dev mode
			var mxDevUrl = '';
			
			// Used to request draw.io sources in dev mode
			var drawDevUrl = '';
			var geBasePath = 'js/grapheditor';
			var mxBasePath = 'mxgraph/src';
			
			if (document.location.protocol == 'file:')
			{
				// Forces includes for dev environment in node.js
				mxForceIncludes = 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');
			
			// Electron
			if (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 文件

typescript 复制代码
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如何实现

js 复制代码
function main(container)
{
	// Checks if the browser is supported
	if (!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 menu
		mxEvent.disableContextMenu(container);
		
		// Creates the graph inside the given container
		var graph = new mxGraph(container);

		// Enables rubberband selection
		new 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 step
		graph.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 display
			graph.getModel().endUpdate();
		}
	}
};
相关推荐
深色風信子3 小时前
Eclipse 插件开发 5.3 编辑器 监听输入
java·eclipse·编辑器·编辑器 监听输入·插件 监听输入
dqsh0616 小时前
ESP32-C3 Vscode+ESP-IDF开发环境搭建 保姆级教程
ide·vscode·物联网·编辑器·智能家居·iot
朝阳3916 小时前
Electron-vite【实战】MD 编辑器 -- 系统菜单(含菜单封装,新建文件,打开文件,打开文件夹,保存文件,退出系统)
electron·编辑器
杰哥技术分享19 小时前
VScode-使用技巧-持续更新
ide·vscode·编辑器
朝阳391 天前
Electron-vite【实战】MD 编辑器 -- 文件列表(含右键快捷菜单,重命名文件,删除本地文件,打开本地目录等)
electron·编辑器
Ada大侦探1 天前
VSCode的下载与安装(2025亲测有效)
ide·vscode·编辑器
干啥都是小小白1 天前
如何使用windows下的vscode连接到本地虚拟机的linux
ide·vscode·编辑器
chilavert3181 天前
深度剖析Node.js的原理及事件方式
linux·node.js·编辑器·vim
huangyuchi.2 天前
【Linux】vim编辑器
linux·运维·笔记·编辑器·vim