浏览代码

20.8.17 release

David Benson 2 年之前
父节点
当前提交
8b6effaba1

+ 9 - 0
ChangeLog

@@ -1,3 +1,12 @@
+06-FEB-2023: 20.8.17
+
+- Fixes connection points dialog, adds help button
+- Fixed connection points losing dx, dy on edit (DS-943)
+- Improves UX for UML sequence diagrams [DID-7338]
+- Fixes initial embedded inline editor position
+- Fixes default fill color on UML frame label
+- Fixes inconsistent font color for condition shape
+
 02-FEB-2023: 20.8.16
 
 - Fixes overriden CSS for buttons and button states [drawio-3326]

+ 1 - 1
VERSION

@@ -1 +1 @@
-20.8.16
+20.8.17

文件差异内容过多而无法显示
+ 2768 - 2766
src/main/webapp/js/app.min.js


+ 35 - 8
src/main/webapp/js/diagramly/Dialogs.js

@@ -3287,6 +3287,16 @@ var NewDialog = function(editorUi, compact, showName, callback, createOnly, canc
 					typeSelect.selectedIndex])) + ')') : '');
 			var title = description.value + type;
 
+			if (typeof mxMermaidToDrawio !== 'undefined')
+			{
+				mxMermaidToDrawio.addListener(mxUtils.bind(this, function(modelXml)
+				{
+					templateXml = '<mxfile><diagram id="d" name="n">' +
+							Graph.compress(modelXml) + '</diagram></mxfile>';
+					lastAiXml = templateXml;
+				}));
+			}
+
 			editorUi.generateOpenAiMermaidDiagram(openAiKey.value, prompt,
 				function(mermaidData, imageData, w, h)
 				{
@@ -3307,8 +3317,12 @@ var NewDialog = function(editorUi, compact, showName, callback, createOnly, canc
 					// Updates template XML for insert button
 					var previewXml = '<mxfile><diagram id="d" name="n">' +
 						Graph.compress(xml) + '</diagram></mxfile>';
-					templateXml = xml;
-					lastAiXml = xml;
+					
+					if (typeof mxMermaidToDrawio === 'undefined')
+					{
+						templateXml = xml;
+						lastAiXml = xml;
+					}
 
 					var magnify = magnifyImage.cloneNode(true);
 					preview.appendChild(magnify);
@@ -13056,12 +13070,13 @@ var ConnectionPointsDialog = function(editorUi, cell)
 		editingGraph.centerZoom = true;
 		editingGraph.maxFitScale = 2;
 
-		function createCPoint(x, y)
+		function createCPoint(x, y, constObj)
 		{
 			var cPointStyle = 'shape=mxgraph.basic.x;fillColor=#29b6f2;strokeColor=#29b6f2;points=[];rotatable=0;resizable=0;connectable=0;editable=0;';
 			var cPoint = new mxCell('', new mxGeometry(x, y, CP_SIZE, CP_SIZE), cPointStyle);
 			cPoint.vertex = true;
 			cPoint.cp = true;
+			cPoint.constObj = constObj;
 
 			return editingGraph.addCell(cPoint);
 		};
@@ -13140,7 +13155,7 @@ var ConnectionPointsDialog = function(editorUi, cell)
 		for (var i = 0; constraints != null && i < constraints.length; i++)
 		{
 			var cp = editingGraph.getConnectionPoint(state, constraints[i]);
-			createCPoint(cp.x - CP_HLF_SIZE, cp.y - CP_HLF_SIZE);
+			createCPoint(cp.x - CP_HLF_SIZE, cp.y - CP_HLF_SIZE, constraints[i]);
 		}
 
 		editingGraph.fit(8);
@@ -13316,14 +13331,14 @@ var ConnectionPointsDialog = function(editorUi, cell)
 
 			var dx = parseInt(dxInput.value) || 0;
 			var dy = parseInt(dyInput.value) || 0;
-
-			var cp = editingGraph.getConnectionPoint(state, 
-						new mxConnectionConstraint(new mxPoint(x/100, y/100), false, null, dx, dy));
+			var constObj = new mxConnectionConstraint(new mxPoint(x/100, y/100), false, null, dx, dy);
+			var cp = editingGraph.getConnectionPoint(state, constObj);
 
 			var cell = editingGraph.getSelectionCell();
 
 			if (cell != null)
 			{
+				cell.constObj = constObj;
 				var geo = cell.geometry.clone();
 				var scale = editingGraph.view.scale;
 				var tr = editingGraph.view.translate;
@@ -13335,6 +13350,11 @@ var ConnectionPointsDialog = function(editorUi, cell)
 
 		function getConstraintFromCPoint(cp)
 		{
+			if (cp.constObj)
+			{
+				return {x: cp.constObj.point.x, y: cp.constObj.point.y, dx: cp.constObj.dx, dy: cp.constObj.dy};
+			}
+
 			var dx = 0, dy = 0, mGeo = mainCell.geometry;
 			var x = mxUtils.format((cp.geometry.x + CP_HLF_SIZE - mGeo.x) / mGeo.width);
 			var y = mxUtils.format((cp.geometry.y + CP_HLF_SIZE - mGeo.y) / mGeo.height);
@@ -13364,11 +13384,18 @@ var ConnectionPointsDialog = function(editorUi, cell)
 			return {x: x, y: y, dx: parseInt(dx), dy: parseInt(dy)};
 		};
 
-		function fillCPointProp()
+		function fillCPointProp(evt)
 		{
 			if (editingGraph.getSelectionCount() == 1)
 			{
 				var cell = editingGraph.getSelectionCell();
+
+				// On move events, exact constraint is lost
+				if (evt)
+				{
+					cell.constObj = null;
+				}
+				
 				var constraint = getConstraintFromCPoint(cell);
 				xInput.value = constraint.x * 100;
 				yInput.value = constraint.y * 100;

+ 3 - 9
src/main/webapp/js/diagramly/EditorUi.js

@@ -8169,10 +8169,10 @@
 			
 			if (urlParams['dev'] == '1')
 			{
-				mxMermaidToDrawio.addListener(mxUtils.bind(this, function(modelXml)
+				/*mxMermaidToDrawio.addListener(mxUtils.bind(this, function(modelXml)
 				{
 					this.importXml(modelXml, null, null, null, null, null, true);
-				}));
+				}));*/
 				
 				mxscript('js/mermaid/mermaid.min.js', delayed,
 					null, null, null, onerror);
@@ -16118,13 +16118,7 @@
 								{
 									this.fireEvent(new mxEventObject('editInlineStart', 'data', [data]));
 									graph.container.focus();
-
-									// Makes sure exit button is inside viewport
-									if (this.sketchFooterMenuElt != null)
-									{
-										this.sketchFooterMenuElt.scrollIntoView();
-									}
-
+									
 									// Moves format window to top of graph
 									if (this.formatWindow != null &&
 										this.formatWindow.window != null &&

+ 1 - 0
src/main/webapp/js/grapheditor/Actions.js

@@ -564,6 +564,7 @@ Actions.prototype.init = function()
 				graph.setCellStyles(mxConstants.STYLE_ROTATABLE, value, cells);
 				graph.setCellStyles(mxConstants.STYLE_DELETABLE, value, cells);
 				graph.setCellStyles(mxConstants.STYLE_EDITABLE, value, cells);
+				graph.setCellStyles('locked', (value == 1) ? 0 : 1, cells);
 				graph.setCellStyles('connectable', value, cells);
 			}
 			finally

+ 3 - 2
src/main/webapp/js/grapheditor/Format.js

@@ -359,7 +359,8 @@ Format.prototype.immediateRefresh = function()
 		label.style.backgroundColor = Format.inactiveTabBackgroundColor;
 		label.style.borderLeftWidth = '1px';
 		label.style.cursor = 'pointer';
-		label.style.width = (containsLabel || ss.cells.length == 0) ? '50%' : '33.3%';
+		label.style.width = ss.cells.length == 0 ? '100%' :
+			(containsLabel ? '50%' : '33.3%');
 		var label2 = label.cloneNode(false);
 		var label3 = label2.cloneNode(false);
 
@@ -372,7 +373,7 @@ Format.prototype.immediateRefresh = function()
 		{
 			label2.style.borderLeftWidth = '0px';
 		}
-		else
+		else if (ss.cells.length > 0)
 		{
 			label.style.borderLeftWidth = '0px';
 			mxUtils.write(label, mxResources.get('style'));

+ 82 - 85
src/main/webapp/js/grapheditor/Graph.js

@@ -1045,10 +1045,7 @@ Graph = function(container, model, renderHint, stylesheet, themes, standalone)
 		var click = this.click;
 		this.click = function(me)
 		{
-			var locked = me.state == null && me.sourceState != null &&
-				this.isCellLocked(me.sourceState.cell);
-			
-			if ((!this.isEnabled() || locked) && !me.isConsumed())
+			if (!this.isEnabled() && !me.isConsumed())
 			{
 				var cell = (locked) ? me.sourceState.cell : me.getCell();
 				
@@ -1148,11 +1145,9 @@ Graph = function(container, model, renderHint, stylesheet, themes, standalone)
 		this.selectRegion = function(rect, evt)
 		{
 			var isect = (mxEvent.isAltDown(evt)) ? rect : null;
-
-			var cells = this.getCells(rect.x, rect.y, rect.width, rect.height, null, null, isect, function(state)
-			{
-				return mxUtils.getValue(state.style, 'locked', '0') == '1';
-			}, true);
+			var cells = this.getCells(rect.x, rect.y,
+				rect.width, rect.height, null, null,
+				isect, null, true);
 
 			if (this.isToggleEvent(evt))
 			{
@@ -1283,22 +1278,6 @@ Graph = function(container, model, renderHint, stylesheet, themes, standalone)
 		{
 			this.initTouch();
 		}
-		
-		/**
-		 * Adds locking
-		 */
-		var graphUpdateMouseEvent = this.updateMouseEvent;
-		this.updateMouseEvent = function(me)
-		{
-			me = graphUpdateMouseEvent.apply(this, arguments);
-			
-			if (me.state != null && this.isCellLocked(me.getCell()))
-			{
-				me.state = null;
-			}
-			
-			return me;
-		};
 	}
 	
 	//Create a unique offset object for each graph instance.
@@ -1389,6 +1368,11 @@ Graph.pasteStyles = ['rounded', 'shadow', 'dashed', 'dashPattern', 'fontFamily',
 					'arcSize', 'comic', 'sketch', 'fillWeight', 'hachureGap', 'hachureAngle', 'jiggle', 'disableMultiStroke',
 					'disableMultiStrokeFill', 'fillStyle', 'curveFitting', 'simplification', 'comicStyle'];
 
+/**
+ * 	
+ */
+Graph.updateShapeStyles = Graph.pasteStyles.concat([mxConstants.STYLE_SHAPE, mxConstants.STYLE_PERIMETER]);
+
 /**
  * Whitelist for known layout names.
  */
@@ -2613,6 +2597,8 @@ Graph.prototype.init = function(container)
 				if (this.model.isVertex(cells[i]) || this.model.isEdge(cells[i]))
 				{
 					var cellStyle = this.getCellStyle(cells[i], false);
+					var perimeter = cellStyle[mxConstants.STYLE_PERIMETER];
+					var restorePerimeter = false;
 
 					for (var key in style)
 					{
@@ -2620,9 +2606,23 @@ Graph.prototype.init = function(container)
 
 						if (cellStyle[key] != value)
 						{
+							// Handles paste of shape to UML lifeline
+							if (key == mxConstants.STYLE_SHAPE &&
+								cellStyle[key] == 'umlLifeline' &&
+								value != 'umlLifeline')
+							{
+								restorePerimeter = true;
+								key = 'participant';
+							}
+
 							this.setCellStyles(key, value, [cells[i]]);
 						}
 					}
+
+					if (restorePerimeter)
+					{
+						this.setCellStyles(mxConstants.STYLE_PERIMETER, perimeter, [cells[i]]);
+					}
 				}
 			}
 		}
@@ -4333,67 +4333,44 @@ Graph.prototype.snapCellsToGrid = function(cells, gridSize)
 	}
 };
 
+/**
+ * Creates a drop handler for inserting the given cells.
+ */
+Graph.prototype.removeChildCells = function(cell)
+{
+	this.model.beginUpdate();
+	try
+	{
+		var childCount = this.model.getChildCount(cell);
+		
+		for (var j = childCount; j >= 0; j--)
+		{
+			this.model.remove(this.model.getChildAt(cell, j));
+		}
+	}
+	finally
+	{
+		this.model.endUpdate();
+	}
+};
+
 /**
  * Creates a drop handler for inserting the given cells.
  */
 Graph.prototype.updateShapes = function(source, targets)
 {
-	var sourceCellStyle = this.getCellStyle(source);
-	var result = [];
-	
 	this.model.beginUpdate();
 	try
 	{
-		var cellStyle = this.getModel().getStyle(source);
+		this.pasteStyle(this.copyStyle(source), targets, Graph.updateShapeStyles);
 
-		// Lists the styles to carry over from the existing shape
-		var styles = ['shadow', 'dashed', 'dashPattern', 'fontFamily', 'fontSize', 'fontColor', 'align', 'startFill',
-		              'startSize', 'endFill', 'endSize', 'strokeColor', 'strokeWidth', 'fillColor', 'gradientColor',
-		              'html', 'part', 'noEdgeStyle', 'edgeStyle', 'elbow', 'childLayout', 'recursiveResize',
-		              'container', 'collapsible', 'connectable', 'comic', 'sketch', 'fillWeight', 'hachureGap',
-		              'hachureAngle', 'jiggle', 'disableMultiStroke', 'disableMultiStrokeFill',
-		              'fillStyle', 'curveFitting', 'simplification', 'sketchStyle'];
-		
+		// Removes child cells of composite cells
 		for (var i = 0; i < targets.length; i++)
 		{
-			var targetCell = targets[i];
-			
-			if ((this.getModel().isVertex(targetCell) == this.getModel().isVertex(source)) ||
-				(this.getModel().isEdge(targetCell) == this.getModel().isEdge(source)))
+			if (mxUtils.getValue(this.getCellStyle(targets[i],
+				false), 'composite', '0') == '1')
 			{
-				var style = this.getCellStyle(targets[i], false);
-				this.getModel().setStyle(targetCell, cellStyle);
-				
-				// Removes all children of composite cells
-				if (mxUtils.getValue(style, 'composite', '0') == '1')
-				{
-					var childCount = this.model.getChildCount(targetCell);
-					
-					for (var j = childCount; j >= 0; j--)
-					{
-						this.model.remove(this.model.getChildAt(targetCell, j));
-					}
-				}
-
-				// Replaces the participant style in the lifeline shape with the target shape
-				if (style[mxConstants.STYLE_SHAPE] == 'umlLifeline' &&
-					sourceCellStyle[mxConstants.STYLE_SHAPE] != 'umlLifeline')
-				{
-					this.setCellStyles(mxConstants.STYLE_SHAPE, 'umlLifeline', [targetCell]);
-					this.setCellStyles('participant', sourceCellStyle[mxConstants.STYLE_SHAPE], [targetCell]);
-				}
-				
-				for (var j = 0; j < styles.length; j++)
-				{
-					var value = style[styles[j]];
-					
-					if (value != null)
-					{
-						this.setCellStyles(styles[j], value, [targetCell]);
-					}
-				}
-				
-				result.push(targetCell);
+				this.removeChildCells(targets[i]);
 			}
 		}
 	}
@@ -4401,8 +4378,6 @@ Graph.prototype.updateShapes = function(source, targets)
 	{
 		this.model.endUpdate();
 	}
-	
-	return result;
 };
 
 /**
@@ -9068,14 +9043,14 @@ if (typeof mxVertexHandler !== 'undefined')
 				tables = tables && this.isTable(cells[i]);
 				rows = rows && this.isTableRow(cells[i]);
 			}
-			
-			return ((cells.length == 1 && evt != null && mxEvent.isShiftDown(evt) &&
-				!mxEvent.isControlDown(evt) && !mxEvent.isAltDown(evt)) ||
+
+			return !this.isCellLocked(cell) && ((cells.length == 1 && evt != null &&
+				mxEvent.isShiftDown(evt) && !mxEvent.isControlDown(evt) &&
+				!mxEvent.isAltDown(evt)) || this.isTargetShape(cell, cells, evt) ||
 				((mxUtils.getValue(style, 'part', '0') != '1' || this.isContainer(cell)) &&
-				mxUtils.getValue(style, 'dropTarget', '1') != '0' &&
-				(mxGraph.prototype.isValidDropTarget.apply(this, arguments) ||
-				this.isContainer(cell)) && !this.isTableRow(cell) &&
-				(!this.isTable(cell) || rows || tables))) && !this.isCellLocked(cell);
+				mxUtils.getValue(style, 'dropTarget', '1') != '0' && (mxGraph.prototype.
+				isValidDropTarget.apply(this, arguments) || this.isContainer(cell)) &&
+				!this.isTableRow(cell) && (!this.isTable(cell) || rows || tables)));
 		};
 	
 		/**
@@ -9611,6 +9586,30 @@ if (typeof mxVertexHandler !== 'undefined')
 			
 			this.model.setValue(cell, value);
 		};
+
+		/**
+		 * 
+		 */
+		Graph.prototype.isTargetShape = function(target, cells, evt)
+		{
+			var shape = mxUtils.getValue(
+				this.getCurrentCellStyle(target),
+				mxConstants.STYLE_SHAPE, '');
+
+			for (var i = 0; i < cells.length; i++)
+			{
+				var shapes = mxUtils.getValue(
+					this.getCurrentCellStyle(cells[i]),
+					'targetShapes', '').split(',');
+				
+				if (mxUtils.indexOf(shapes, shape) >= 0)
+				{
+					return true;
+				}
+			}
+
+			return false;
+		};
 		
 		/**
 		 * Overridden to stop moving edge labels between cells.
@@ -9618,8 +9617,6 @@ if (typeof mxVertexHandler !== 'undefined')
 		var graphGetDropTarget = Graph.prototype.getDropTarget;
 		Graph.prototype.getDropTarget = function(cells, evt, cell, clone)
 		{
-			var model = this.getModel();
-			
 			// Disables drop into group if alt is pressed
 			if (mxEvent.isAltDown(evt))
 			{

+ 19 - 1
src/main/webapp/js/grapheditor/Shapes.js

@@ -2404,13 +2404,26 @@
 	};
 
 	mxUtils.extend(UmlFrame, mxShape);
-
+	
 	UmlFrame.prototype.width = 60;
 
 	UmlFrame.prototype.height = 30;
 
 	UmlFrame.prototype.corner = 10;
 
+	UmlFrame.prototype.configurePointerEvents = function(c)
+	{
+		var bg = mxUtils.getValue(this.style, mxConstants.STYLE_SWIMLANE_FILLCOLOR, mxConstants.NONE);
+
+		if (this.style != null && (bg == null ||
+			bg == mxConstants.NONE || this.opacity == 0 ||
+			this.fillOpacity == 0) && mxUtils.getValue(this.style,
+			mxConstants.STYLE_POINTER_EVENTS, '1') == '0')
+		{
+			c.pointerEvents = false;
+		}
+	};
+
 	UmlFrame.prototype.getLabelMargins = function(rect)
 	{
 		return new mxRectangle(0, 0,
@@ -2442,6 +2455,9 @@
 			c.setFillColor(this.fill);
 		}
 
+		// Label part handles events
+		c.pointerEvents = true;
+
 		c.begin();
 		c.moveTo(x, y);
 		c.lineTo(x + w0, y);
@@ -2450,6 +2466,8 @@
 		c.lineTo(x, y + h0);
 		c.close();
 		c.fillAndStroke();
+
+		this.configurePointerEvents(c);
 		
 		c.begin();
 		c.moveTo(x + w0, y);

文件差异内容过多而无法显示
+ 48 - 55
src/main/webapp/js/grapheditor/Sidebar.js


文件差异内容过多而无法显示
+ 2606 - 2604
src/main/webapp/js/integrate.min.js


文件差异内容过多而无法显示
+ 1865 - 1867
src/main/webapp/js/viewer-static.min.js


文件差异内容过多而无法显示
+ 1865 - 1867
src/main/webapp/js/viewer.min.js


文件差异内容过多而无法显示
+ 2 - 2
src/main/webapp/mxgraph/mxClient.js


+ 22 - 22
src/main/webapp/resources/dia_zh-tw.txt

@@ -79,7 +79,7 @@ bottomAlign=向下對齊
 bottomLeft=左下
 bottomRight=右下
 bpmn=BPMN
-bringForward=Bring Forward
+bringForward=上移一層
 browser=瀏覽器
 bulletedList=項目符號清單
 business=商務
@@ -152,8 +152,8 @@ connectionArrows=連接箭頭
 connectionPoints=連接點
 constrainProportions=限制寬高比
 containsValidationErrors=含有驗證錯誤
-copiedToClipboard=已拷貝至剪貼簿
-copy=拷貝
+copiedToClipboard=已複製到剪貼簿
+copy=複製
 copyConnect=連接時複製
 copyCreated=A copy of the file was created.
 copyData=複製資料
@@ -378,7 +378,7 @@ gradientColor=顏色
 grid=網格
 gridColor=網格線顏色
 gridSize=網格大小
-group=合併
+group=群組
 guides=參考線
 hateApp=我討厭 draw.io
 heading=標題
@@ -627,7 +627,7 @@ relativeUrlNotAllowed=Relative URL not allowed
 rememberMe=記住我
 rememberThisSetting=記住設定
 removeFormat=清除格式
-removeFromGroup=移出組
+removeFromGroup=移出
 removeIt=刪除{1}
 removeWaypoint=刪除航點
 rename=重新命名
@@ -684,7 +684,7 @@ selectFile=選擇檔案
 selectFolder=選擇目錄
 selectFont=選擇字型
 selectNone=全不選
-selectTemplate=Select Template
+selectTemplate=選擇樣板
 selectVertices=選擇頂點
 sendBackward=下移一層
 sendMessage=傳送
@@ -713,7 +713,7 @@ signs=標誌
 signOut=登出
 simple=簡單
 simpleArrow=簡單箭頭
-simpleViewer=Simple Viewer
+simpleViewer=簡單檢視器
 size=大小
 sketch=Sketch
 snapToGrid=Snap to Grid
@@ -724,7 +724,7 @@ software=軟體
 space=空間
 spacing=間距
 specialLink=特殊連結
-stateDiagram=State Diagram
+stateDiagram=狀態圖
 standard=標準
 startDrawing=開始繪圖
 stopDrawing=停止繪圖
@@ -753,8 +753,8 @@ theme=佈景主題
 timeout=逾時
 title=標題
 to=至
-toBack=移至最後
-toFront=移至最前
+toBack=移動到最下層
+toFront=移動到最上層
 tooLargeUseDownload=檔案過大,請改用下載。
 toolbar=工具列
 tooltips=秘訣
@@ -773,7 +773,7 @@ twitter=Twitter
 uml=UML
 underline=底線
 undo=還原
-ungroup=取消組
+ungroup=取消
 unmerge=取消合併
 unsavedChanges=未儲存的修改
 unsavedChangesClickHereToSave=修改未儲存。點此以儲存。
@@ -897,9 +897,9 @@ confContactAdmin=Please contact your Confluence administrator.
 readErr=讀取錯誤
 editingErr=編輯錯誤
 confExtEditNotPossible=This diagram cannot be edited externally. Please try editing it while editing the page
-confEditedExt=Diagram/Page edited externally
+confEditedExt=圖表/頁面已在外部編輯
 diagNotFound=Diagram Not Found
-confEditedExtRefresh=Diagram/Page is edited externally. Please refresh the page.
+confEditedExtRefresh=圖表/頁面已在外部編輯。請重新整理頁面。
 confCannotEditDraftDelOrExt=Cannot edit diagrams in a draft page, diagram is deleted from the page, or diagram is edited externally. Please check the page.
 retBack=Return back
 confDiagNotPublished=該圖表不屬於已發布的頁面
@@ -930,22 +930,22 @@ drawConfig=draw.io 組態
 customLib=自訂圖庫
 customTemp=自訂樣板
 pageIdsExp=匯出頁面 ID
-drawReindex=draw.io re-indexing (beta)
+drawReindex=draw.io 重新索引中 (測試)
 working=Working
 drawConfigNotFoundInst=draw.io 組態空間 (DRAWIOCONFIG) 不存在。儲存 draw.io 組態檔和自訂圖庫/樣板時需要該空間。
 createConfSp=建立組態空間
 unexpErrRefresh=Unexpected error, please refresh the page and try again.
 configJSONInst=Write draw.io JSON configuration in the editor below then click save. If you need help, please refer to
 thisPage=this page
-curCustLib=Current Custom Libraries
+curCustLib=當前自訂圖庫
 libName=圖庫名稱
 action=動作
 drawConfID=draw.io 組態 ID
 addLibInst=Click the "Add Library" button to upload a new library.
 addLib=新增圖庫
 customTempInst1=Custom templates are draw.io diagrams saved in children pages of
-customTempInst2=For more details, please refer to
-tempsPage=Templates page
+customTempInst2=更多詳細資訊,請參考
+tempsPage=樣板頁面
 pageIdsExpInst1=Select export target, then click the "Start Export" button to export all pages IDs.
 pageIdsExpInst2=Please note that the export procedure will take some time and the browser window must remain open until the export is completed.
 startExp=開始匯出
@@ -1031,7 +1031,7 @@ confANoLnksInDrgm=No links to update in: {1}
 confAUpdateLnkToPg=Updated link to page: "{1}" in diagram: "{2}"
 confAUpdateLBLnkToPg=Updated lightbox link to page: "{1}" in diagram: "{2}"
 confAUpdateLnkBase=Updated base URL from: "{1}" to: "{2}" in diagram: "{3}"
-confAPageIdsImpDone=Page IDs Import finished
+confAPageIdsImpDone=頁面 ID 匯入已完成
 confAPrcsMacrosInPage=正在處理頁面「{1}」中的 draw.io 巨集
 confAErrFetchPage=Error fetching page "{1}"
 confAFixingMacro=Fixing macro of diagram "{1}"
@@ -1080,11 +1080,11 @@ newDiagram=新增圖表
 editable=可編輯
 confAReimportStarted=Re-import {1} diagrams started...
 spaceFilter=Filter by spaces
-curViewState=Current Viewer State
+curViewState=當前檢視器狀態
 pageLayers=Page and Layers
 customize=自訂
 firstPage=First Page (All Layers)
-curEditorState=Current Editor State
+curEditorState=當前編輯器狀態
 noAnchorsFound=未找到錨點
 attachment=附件
 curDiagram=目前圖表
@@ -1152,7 +1152,7 @@ officeNotSupported=This feature is not supported in this host application
 someImagesFailed={1} out of {2} failed due to the following errors
 importingNoUsedDiagrams=Importing {1} Diagrams not used in pages
 importingDrafts=Importing {1} Diagrams in drafts
-processingDrafts=Processing drafts
+processingDrafts=處理草稿中
 updatingDrafts=更新草稿中
 updateDrafts=更新草稿
 notifications=通知
@@ -1192,7 +1192,7 @@ contactOwner=聯絡擁有者
 viewerOnlyMsg=You cannot edit the diagrams in the mobile platform, please use the desktop client or a web browser.
 website=網站
 check4Updates=檢查更新
-attWriteFailedRetry={1}: Attachment write failed, trying again in {2} seconds...
+attWriteFailedRetry={1}: 附件寫入失敗,請在 {2} 秒後重試...
 confPartialPageList=We couldn't fetch all pages due to an error in Confluence. Continuing using {1} pages only.
 spellCheck=拼寫檢查
 noChange=No Change

文件差异内容过多而无法显示
+ 1 - 1
src/main/webapp/service-worker.js


文件差异内容过多而无法显示
+ 1 - 1
src/main/webapp/service-worker.js.map


二进制
src/main/webapp/templates/basic/sequence.png


文件差异内容过多而无法显示
+ 1 - 1
src/main/webapp/templates/basic/sequence.xml