drawio 二次开发

2023-10-26

目的:

使用drawIO, 进行绘图,
然后保存的时候,存到MySQL,
下次打开的时候,可以遍历MySQL的所有文件,
点击指定文件,可以在新的画布上展示已有的绘图

step1:

开发环境:

默认使用tomcat 部署:

改造成spring boot 部署…

image-20211026103707208

image-20211026103733797

image-20211026103748113

Tomcat的包

image-20211026103807537

image-20211026103821628

image-20211026103846967

js 改造

获取当前文件:

  1. 访问的时候,添加?dev=1 进入开发模式

  2. 保存文件的函数 App.save

App.prototype.save = function(name, done)
{
	var file = this.getCurrentFile();
	console.log(file); // 这个file是 我们最终的file 获取对象
	
	if (file != null && this.spinner.spin(document.body, mxResources.get('saving')))
	{
		this.editor.setStatus('');
		
		if (this.editor.graph.isEditing())
		{
			this.editor.graph.stopEditing();
		}
        ....... 

加载已有的画布到新的画布上

App.prototype.showSplash = function(force)
{
	//Splash dialog shouldn't be shownn when running without a file menu
	if (urlParams['noFileMenu'] == '1')
	{
		return;	
	}
	
	............................................  一些代码忽略不写
	});
	
	if (this.editor.isChromelessView())
	{
		this.handleError({message: mxResources.get('noFileSelected')},
			mxResources.get('errorLoadingFile'), mxUtils.bind(this, function()
		{
			this.showSplash();
		}));
	}
	/**
	 * 如果有URL上 有 id,表示打开了一个存在的文档,进入编辑模式
	 */
	else if (urlParams['id']) {
		const mockFile = {
			title: 'luffyzh.drawio',
			data: '<mxfile host="localhost" modified="2021-09-02T09:50:39.574Z" agent="5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36" etag="PyBU88KGLdBE5FU7fpPf" version="@DRAWIO-VERSION@" type="device"><diagram id="C5RBs43oDa-KdzZeNtuy" name="Page-1">7VhZc5swEP41PLbD4WDnsThx0tbNpE3aTB9lkIVqwVIhfOTXdzHCgPH4aOscnvjBo12WlbTft4dtOP1ofiVJEn6BgArDNoO54VwYtn3WNfE7VywKhduzCwWTPChUVqW4449UK/V7LOMBTRuGCkAonjSVPsQx9VVDR6SEWdNsDKK5a0IYbSnufCLa2gceqLDQ9uxupb+mnIXlzpZ7XjyJSGmsb5KGJIBZTeVcGk5fAqhiFc37VOSxK+Py8HHxIIYT9+rT1/Q3+e59vr/58a5wNjjkldUVJI3V/3WtsZwSkel46buqRRlACVkc0NyJaTheqCKBSwuXv6hSCw04yRSgCqQKgUFMxBAg0XZjiJU2s3KZxsGHHFiURwL8SaEacCH0Hihp+x5KqZIwWWGXO1gBkRsLMqLCI/6ELQ/aBwESH8UQ09xVgGTQd6kOd1lpvT1jqzFIIZM+3WLnaIoTyeg2f25hl5+vxlON3BWFiCq5QANJBVF82iQz0TnBVnYV7rjQ0B9AA6dFA5GNx4vHcAsbciRmIVf0LiHLkMywfjQZUkceL+cxQdJU47YD1sNgmVKp6HxrIMunrs5mXc56WpxVtcEqEz6s1YWOeaTQd1qh/4nl8i0J/yUJ3T2TsOxRO7NQk6Ukxt5JqT3dAsd7VSYwHqd4sHXqrDb8ezadtdh0Ay0y7cbjVdPtmcjUPYxL1ovnktvi0pBEiWG7AsPgjSSuWL5KRMYYkgXdxYYzaNeuEKJRlu5uFw2McwYNSMRFHq9rKqZUcZ9saCpEcIb7XvgIN5WbyYNb8pih5FbS/ZKsWH+P2Gy6zWazkuvdxtzQbXrH6jbdFqa3iF4BnW2KJb4n1vEdew2E8+du+b19ivSrLsFP3vHLarq75Vt7lmnNHvO9g58GgV7+FHC+10z5NgYch2H2qQ0C5QlrfPIyMWpPAqNMxstBADL1NglsmwTsTU3oSSeBshDWQP1GE8IRTHN4inPA+i//jvPcc0BZKZoQiDymtllk2IlhsD6LOdbxMECx+m+2KIXVH9zO5R8=</diagram></mxfile>'
		}
		const file = new LocalFile(this, mockFile.data, mockFile.title, this.mode);
		this.loadFile(`-1`, true, file);
	}

	else if (!mxClient.IS_CHROMEAPP && (this.mode == null || force))
	{
		var rowLimit = (serviceCount == 4) ? 2 : 3;
		
		var dlg = new StorageDialog(this, mxUtils.bind(this, function()
		{
			this.hideDialog();
			showSecondDialog();
		}), rowLimit);
		// 展示框,存储位置选择框的弹出
		this.showDialog(dlg.container, (rowLimit < 3) ? 200 : 300,
			((serviceCount > 3) ? 320 : 210), true, false);
	}
	else if (urlParams['create'] == null)
	{
		// 调试,不展示存储位置...
		// showSecondDialog();
	}
};

所以,现在有什么了?

1 保存画布到MySQL

2 加载已有的图形到画布上

3 展示所有的图形(跟drawio 无关,list mysql 数据即可.通过id 加载到drawio 画布上)

还缺什么?

创建新的画布,屏蔽掉所有的弹出框

即理想流程是:

创建画布-> 编辑图形-> 保存图形

查询图形列表-> 加载图形 -> 编辑图形->保存图形

删除图形


加粗的是没有的,斜体是已经有的或可复用的

白色是简单的

TODO:

  1. 创建画布,真的是看不懂他的js了…
  2. 改造成spring boot 项目,这个简单…

END

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

drawio 二次开发 的相关文章

  • 计算机2.0培训心得,2020信息技术2.0培训心得

    时代的车轮滚滚 把我们带到信息高速路 信息技术迅猛发展令我们猝不及防 也惊喜万分 它渗透到社会生活角角落落 校园更是如此 传统教育教学模式 教学方式和教学手段等统统被打破 我们甚至措手不及 今年 我幸运参加2020年年底为期7天的中小学信息
  • Typora自定义命令上传图片到服务器

    Typora自定义命令上传图片到服务器 缘由 因为平时喜欢用Typora写文档 markdown也比较方便复制到各个网站上去展示 但是markdown复制的文件之前一直都是保存在本地 md文件复制给别人或者复制到其他博客上会导致图片找不到或
  • 6.9行为型---访问者模式

    在现实生活中 有些集合对象中存在多种不同的元素 且每种元素也存在多种不同的访问者和处理方式 例如 公园中存在多个景点 也存在多个游客 不同的游客对同一个景点的评价可能不同 医院医生开的处方单中包含多种药元素 査看它的划价员和药房工作人员对它
  • datatables完整的增删改查

    1 需要指定datatables的ID 1
  • AVL树的旋转

    平衡二叉树在进行插入操作的时候可能出现不平衡的情况 AVL树即是一种自平衡的二叉树 它通过旋转不平衡的节点来使二叉树重新保持平衡 并且查找 插入和删除操作在平均和最坏情况下时间复杂度都是O log n AVL树的旋转一共有四种情形 注意所有
  • QT console工程关于控制台的弹出

    创建了一个qt console application工程 作为keil的一脚本工具使用 但是在keil编译完成后总是弹出qt控制台 且keil编译按钮显示完成不了 只有将控制台关闭后 keil编译按钮才显示编译完成 影响使用效果 于是想关

随机推荐

  • OD机试题

    OD机考原题 1 恢复数字序列 对于一个连续正整数组成的序列 可以将其拼接成一个字符串 再将字符串里的部分字符打乱顺序 如序列8 9 10 11 12 拼接成的字符串为89101112 打乱一部分字符后得到90811211 原来的正整数10
  • 贪心算法

    贪心算法 不需要考虑整个解空间所有解 只考虑当前的最优解 不能回溯 也不记录每一步的解 习题 1 买卖股票的最佳时机 给定一个数组 prices 它的第 i 个元素 prices i 表示一支给定股票第 i 天的价格 你只能选择 某一天 买
  • Mysql应用安装后找不到my.ini文件

    一 背景 我在两台电脑上安装了MySQL Server 8 0 准备继续做主从配置 这时候就需要用到my ini文件进行配置 但是我找不到my ini文件 我的安装目录中没有my ini文件 这里我的mysql安装目录为C Program
  • [Ubuntu]Ubuntu18.04安装配置软件

    0 Ubuntu 查看自身版本信息 方法1 cat proc version 参数说明 Linux version 4 15 0 101 generic buildd lgw01 amd64 003 linux内核版本号 gcc versi
  • 解决Win10下_findnext()异常

    在win10中 使用文件遍历函数 findnext会报0xC0000005错误 原因 findnext 第一个参数 路径句柄 返回的类型为intptr t long long 如果定义为long 在win7中是没有问题 但是在win10中就
  • 数据分析毕业设计 招聘网站大数据分析与可视化系统 - python flask

    文章目录 0 前言 1 课题背景 2 实现效果 3 Flask框架 4 Echarts 5 爬虫 0 前言 这两年开始毕业设计和毕业答辩的要求和难度不断提升 传统的毕设题目缺少创新和亮点 往往达不到毕业答辩的要求 这两年不断有学弟学妹告诉学
  • Java list.sort() 写法

    1 完整版 list sort new Comparator
  • Java实现百度云vin识别接口代码

    本文是service调用shibie方法 controller略 public class ImagesService public static String getResult String otherHost https aip ba
  • Cesium--一些实验过程中的效果记录

    1 一种反射效果 片元着色器代码 fragmentShaderSource in vec3 v positionMC in vec3 v positionEC in vec2 v st void main czm materialInput
  • 苹果电脑如何同时运行Mac和Windows--pd18

    如何同时运行Mac和Windows呢 这里为大家推荐pd18 全名Parallels Desktop 18虚拟机 是很火爆的一款软件 可以在Mac上无缝衔接Windows系统 并且不用重启 可以同时运行 设置不同的桌面 两指手势 滑动就可以
  • 判定通视的计算法公式_测量学简答题(5篇范例)

    计算改正后的导线边的坐标增量 推算未知点的平面坐标 8 水准测量时为什么要求前后视距相等 水准仪视准轴不平行于管水准器轴之差称为i角 当每站的前后视距相等时 i角对前后视读数的影响大小相等 符号相同 计算高差时可以抵消 9 视差是如何产生的
  • 服务器名称显示空,服务器名称为空

    服务器名称为空 内容精选 换一换 当您想要通过华为云的云解析服务为您的邮箱服务器提供解析服务 可以参考本操作为域名配置邮箱解析 例如 搭建一个邮箱服务器 如果要实现通过mail example com登录邮箱 并使用域名作为SMTP IMA
  • javascript中各种数据类型比较及类型转换

    前言 Js中的数据类型可以分为Js中的数据类型可以分为原始值和引用值两大类 原始值存储在栈内存中 引用值存储在堆内存中 栈内存中会保存应用值的指针以供调用 属于原始值的数据类型有 number string undefined boolea
  • UE4平滑视角缩放

    Tick接Interp函数 用来做一个平滑过渡的值 这个值代表了一个从当前值到目标值的过渡 然后还有速度 当前值就是Target Arm Length 目标值新建一个变量 值和默认的Target Arm Length一样 下面滚轮事件 改I
  • Jenkins可持续集成_序:为什么要学习持续集成?

    阅读须知 上传的是图片 要看清楚请点击图片放大查看 版权声明 本图片来自于网络 如果涉及侵权问题 请及时联系本人删除 其他声明 本文章严禁转载 转载于 https blog 51cto com wangxiaoke 2367404
  • steam服务器连接不稳定WIN10,小编操作win10系统steam连接不稳的解决步骤

    我们的电脑都安装的是windows系统来进行办公或者娱乐 有时候会遇到一些比如win10系统steam连接不稳的问题 我们通过调查发现不少用户都碰到了win10系统steam连接不稳的问题 如果你现在找不到专业的人员来解决win10系统st
  • Android Studio 中Intel HAXM安装与模拟器创建

    Intel HAXM Hardware Accelerated Execution Manager 使用基于 Intel R Virtualization Technology VT 的硬件加速 因此需要 CPU 支持 VT 而且仅限于 I
  • C语言算法--快速排序法

    C语言算法 快速排序法 1 什么是快速排序法 快速排序 Quicksort 是一种常用的排序算法 它基于分治的思想 它的核心思想是选择一个基准元素 将数组划分为两个子数组 使得左边的子数组中的所有元素都小于等于基准元素 右边的子数组中的所有
  • 网络层IP协议

    一 IP协议的报文格式 1 4位版本号 目前只有IPv4和IPv6两个版本 所以这里只能填4或6 2 4位首部长度 4个bit能表示的最大数字是15 而这里的单位是4个字节 所以首部长度最大为15 4 60个字节 3 8位服务类型 8位服务
  • drawio 二次开发

    目的 使用drawIO 进行绘图 然后保存的时候 存到MySQL 下次打开的时候 可以遍历MySQL的所有文件 点击指定文件 可以在新的画布上展示已有的绘图 step1 开发环境 默认使用tomcat 部署 改造成spring boot 部