Skip to content

Commit a061b80

Browse files
committed
28.2.7 release
1 parent eaae294 commit a061b80

98 files changed

Lines changed: 9565 additions & 9273 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

ChangeLog

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,27 @@
1+
14-OCT-2025L 28.2.7
2+
3+
- Adds support for animations on multiple pages [jgraph/drawio#5262]
4+
- Fixes q.getStatus is not a function in OneDriveClient
5+
- Fixes possible a.split is not a function in StyleFormatPanel
6+
7+
13-OCT-2025: 28.2.6
8+
9+
- [conf cloud] Notifies user when app is uninstalled in case of forge migration
10+
- Makes some Cisco stencils multi-color flexible
11+
- Fixes blurry image export [jgraph/drawio-desktop#2209]
12+
- Adds copy marker option [jgraph/drawio#5280]
13+
- Fixes inconsistent default text styles and sizes [jgraph/drawio#4818]
14+
- Enables bulk modification of container property
15+
- Shows shape name in cell properties [jgraph/drawio#5288]
16+
- AWS shapes update
17+
- Adds opacity option in color dialog [jgraph/drawio#5256]
18+
- Fixes text wrapping for process shape with fixed size [jgraph/drawio#5296]
19+
- Uses single quotes for font names with spaces [jgraph/drawio-desktop#2214]
20+
- Fixes click handling on SVG embed option labels
21+
- Disasbles convert label option for unformatted text
22+
- Fixes property panel in min UI [jgraph/drawio-desktop#2176]
23+
- Fixes context menu for multiple selected edges [jgraph/drawio#4791]
24+
125
24-SEP-2025: 28.2.5
226

327
- Fixes handling of alpha values in inverted colors [DID-16387]

VERSION

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
28.2.5
1+
28.2.7

src/main/java/com/mxgraph/online/ImgurRedirectServlet.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,9 +38,9 @@ protected void doGet(HttpServletRequest request,
3838
{
3939
String id = uri.substring(last + 1);
4040
response.setHeader("Location",
41-
"https://www.draw.io/?chrome=0&lightbox=1&layers=1&url=http%3A%2F%2Fi.imgur.com%2F"
41+
"https://app.diagrams.net/?chrome=0&lightbox=1&layers=1&url=http%3A%2F%2Fi.imgur.com%2F"
4242
+ id + ".png"
43-
+ "&edit=https%3A%2F%2Fwww.draw.io%2F%3Furl%3Dhttp%253A%252F%252Fi.imgur.com%252F"
43+
+ "&edit=https%3A%2F%2Fapp.diagrams.net%2F%3Furl%3Dhttp%253A%252F%252Fi.imgur.com%252F"
4444
+ id + ".png");
4545
response.setStatus(HttpServletResponse.SC_TEMPORARY_REDIRECT);
4646
}
2.27 KB
Loading

src/main/webapp/js/app.min.js

Lines changed: 2923 additions & 2915 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/main/webapp/js/bootstrap.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ if (urlParams['dev'] != '1')
7676
// Redirects apex, drive and rt to www
7777
if (host === 'draw.io' || host === 'rt.draw.io' || host === 'drive.draw.io')
7878
{
79-
host = 'www.draw.io';
79+
host = 'app.diagrams.net';
8080
}
8181

8282
var href = proto + '//' + host + window.location.href.substring(

src/main/webapp/js/diagramly/Devel.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ if (!mxIsElectron)
6262
// Adds script tags and loads shapes with eval
6363
replace(/%script-src%/g, 'https://www.dropbox.com https://api.trello.com \'unsafe-eval\'').
6464
// Adds Trello and Dropbox backend storage
65-
replace(/%connect-src%/g, 'https://www.dropbox.com https://*.dropboxapi.com https://trello.com https://api.trello.com https://my.microsoftpersonalcontent.com').
65+
replace(/%connect-src%/g, 'https://*.dropboxapi.com https://trello.com https://api.trello.com https://my.microsoftpersonalcontent.com').
6666
// Loads common.css from mxgraph
6767
replace(/%style-src%/g, '').
6868
replace(/%frame-src%/g, '').

src/main/webapp/js/diagramly/Dialogs.js

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6370,7 +6370,7 @@ var LinkDialog = function(editorUi, initialValue, btnLabel, fn, showPages, showN
63706370
if (data.docs[0].mimeType == 'application/mxe' || (data.docs[0].mimeType != null &&
63716371
data.docs[0].mimeType.substring(0, 23) == 'application/vnd.jgraph.'))
63726372
{
6373-
href = 'https://www.draw.io/#G' + data.docs[0].id;
6373+
href = 'https://app.diagrams.net/#G' + data.docs[0].id;
63746374
}
63756375
else if (data.docs[0].mimeType == 'application/vnd.google-apps.folder')
63766376
{
@@ -11192,8 +11192,7 @@ var LibraryDialog = function(editorUi, name, library, initialImages, file, mode,
1119211192
if (cells.length > 0)
1119311193
{
1119411194
editorUi.sidebar.createThumb(cells, ew, eh, wrapper, null,
11195-
true, false, null, null, (Editor.isDarkMode()) ?
11196-
'#2a252f' : '#ffffff');
11195+
true, false, null, null, graph.shapeBackgroundColor);
1119711196

1119811197
// Needs inline block on SVG for delete icon to appear on same line
1119911198
wrapper.firstChild.style.display = 'inline-block';

src/main/webapp/js/diagramly/Editor.js

Lines changed: 31 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -288,6 +288,12 @@
288288
*/
289289
Editor.pasteAtMousePointer = true;
290290

291+
/**
292+
* Specifies the default text style.
293+
*/
294+
Editor.defaultTextStyle = 'text;html=1;whiteSpace=wrap;strokeColor=none;fillColor=none;' +
295+
'align=center;verticalAlign=middle;rounded=0;';
296+
291297
/**
292298
* Specifies if ChatGPT should be enabled. Default is true only
293299
* on app.diagrams.net (including test and preprod).
@@ -674,13 +680,13 @@
674680
{name: 'fixDash', dispName: 'Fixed Dash', type: 'bool', defVal: false},
675681
{name: 'container', dispName: 'Container', type: 'bool', getDefaultValue: function(state, format)
676682
{
677-
var cell = (state.vertices.length == 1 && state.edges.length == 0) ? state.vertices[0] : null;
683+
var cell = (state.vertices.length > 0 && state.edges.length == 0) ? state.vertices[0] : null;
678684
var graph = format.editorUi.editor.graph;
679685

680686
return cell != null && graph.isSwimlane(cell);
681687
}, isVisible: function(state, format)
682688
{
683-
return state.vertices.length == 1 && state.edges.length == 0;
689+
return state.vertices.length > 0 && state.edges.length == 0;
684690
}},
685691
{name: 'dropTarget', dispName: 'Drop Target', type: 'bool', getDefaultValue: function(state, format)
686692
{
@@ -912,10 +918,10 @@
912918
'#\n' +
913919
'## ---- CSV below this line. First line are column names. ----\n' +
914920
'name,position,id,location,manager,email,fill,stroke,refs,url,image\n' +
915-
'Tessa Miller,CFO,emi,Office 1,,me@example.com,default,#6c8ebf,,https://www.draw.io,https://cdn3.iconfinder.com/data/icons/user-avatars-1/512/users-3-128.png\n' +
916-
'Edward Morrison,Brand Manager,emo,Office 2,Tessa Miller,me@example.com,default,#82b366,,https://www.draw.io,https://cdn3.iconfinder.com/data/icons/user-avatars-1/512/users-10-3-128.png\n' +
917-
'Alison Donovan,System Admin,rdo,Office 3,Tessa Miller,me@example.com,default,#82b366,"emo,tva",https://www.draw.io,https://cdn3.iconfinder.com/data/icons/user-avatars-1/512/users-2-128.png\n' +
918-
'Evan Valet,HR Director,tva,Office 4,Tessa Miller,me@example.com,default,#82b366,,https://www.draw.io,https://cdn3.iconfinder.com/data/icons/user-avatars-1/512/users-9-2-128.png\n';
921+
'Tessa Miller,CFO,emi,Office 1,,me@example.com,default,#6c8ebf,,https://app.diagrams.net,https://cdn3.iconfinder.com/data/icons/user-avatars-1/512/users-3-128.png\n' +
922+
'Edward Morrison,Brand Manager,emo,Office 2,Tessa Miller,me@example.com,default,#82b366,,https://app.diagrams.net,https://cdn3.iconfinder.com/data/icons/user-avatars-1/512/users-10-3-128.png\n' +
923+
'Alison Donovan,System Admin,rdo,Office 3,Tessa Miller,me@example.com,default,#82b366,"emo,tva",https://app.diagrams.net,https://cdn3.iconfinder.com/data/icons/user-avatars-1/512/users-2-128.png\n' +
924+
'Evan Valet,HR Director,tva,Office 4,Tessa Miller,me@example.com,default,#82b366,,https://app.diagrams.net,https://cdn3.iconfinder.com/data/icons/user-avatars-1/512/users-9-2-128.png\n';
919925

920926
/**
921927
* Capability check for canvas API
@@ -4154,6 +4160,9 @@
41544160
{
41554161
try
41564162
{
4163+
svgRoot.style.setProperty('-webkit-font-smoothing', 'antialiased');
4164+
svgRoot.style.setProperty('-moz-osx-font-smoothing', 'grayscale');
4165+
41574166
var img = new Image();
41584167

41594168
img.onload = mxUtils.bind(this, function()
@@ -5635,18 +5644,19 @@
56355644
inp.value = pValue;
56365645
inp.style.borderWidth = '0px';
56375646

5638-
if (pName == 'id')
5647+
if (pName == 'id' || pName == 'shape')
56395648
{
56405649
row.firstChild.innerHTML = '';
56415650
row.firstChild.setAttribute('colspan', '2');
56425651

56435652
inp.style.flexGrow = '1';
56445653
inp.style.marginLeft = '4px';
5645-
inp.style.textAlign = 'center';
5654+
inp.style.textAlign = pName == 'id' ?
5655+
'center' : 'left';
56465656
inp.setAttribute('title', pValue);
56475657

56485658
var div = document.createElement('div');
5649-
mxUtils.write(div, mxResources.get('id'));
5659+
mxUtils.write(div, mxResources.get(pName) + ':');
56505660
div.style.display = 'inline-flex';
56515661
div.style.alignItems = 'center';
56525662
div.style.width = '100%';
@@ -5873,19 +5883,25 @@
58735883
{
58745884
grid.appendChild(createPropertyRow('id', mxUtils.htmlEntities(cellId),
58755885
{dispName: 'id', type: 'readOnly'}, true, false));
5886+
5887+
if (state.style != null && state.style.shape != null)
5888+
{
5889+
grid.appendChild(createPropertyRow('shape', mxUtils.htmlEntities(state.style.shape),
5890+
{dispName: 'shape', type: 'readOnly'}, true, false));
5891+
}
58765892
}
58775893

58785894
for (var key in properties)
58795895
{
58805896
var prop = properties[key];
5881-
5897+
5898+
if (typeof(prop.isVisible) == 'function')
5899+
{
5900+
if (!prop.isVisible(state, this)) continue;
5901+
}
5902+
58825903
if (!prop.primary)
58835904
{
5884-
if (typeof(prop.isVisible) == 'function')
5885-
{
5886-
if (!prop.isVisible(state, this)) continue;
5887-
}
5888-
58895905
var pValue = (prop.getValue != null) ? prop.getValue(state, this) : (state.style[key] != null? mxUtils.htmlEntities(state.style[key] + '') :
58905906
((prop.getDefaultValue != null) ? prop.getDefaultValue(state, this) : prop.defVal)); //or undefined if defVal is undefined
58915907

src/main/webapp/js/diagramly/EditorUi.js

Lines changed: 20 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -33,12 +33,12 @@
3333
window.location.hostname != 'test.draw.io';
3434

3535
/**
36-
* Protocol and hostname to use for embedded files. Default is https://www.draw.io
36+
* Protocol and hostname to use for embedded files.
3737
*/
3838
EditorUi.drawHost = window.DRAWIO_BASE_URL;
3939

4040
/**
41-
* Protocol and hostname to use for embedded files. Default is https://www.draw.io
41+
* Protocol and hostname to use for embedded files.
4242
*/
4343
EditorUi.lightboxHost = window.DRAWIO_LIGHTBOX_URL;
4444

@@ -4462,9 +4462,12 @@
44624462
this.handleError(e);
44634463
}
44644464
}
4465-
}), null, mxResources.get('close'), null, null, null, true, null, null, helpLink, buttons, elt);
4465+
}), null, mxResources.get('close'), null, null,
4466+
null, true, null, null, helpLink, buttons, elt);
44664467

4467-
this.showDialog(dlg.container, 660, 480, true, false);
4468+
var w = (buttons != null && buttons.length > 2) ? 500 : 440;
4469+
this.showDialog(dlg.container, 660, 480, true, false,
4470+
null, null, null, new mxRectangle(0, 0, w, 280));
44684471
dlg.init();
44694472
};
44704473

@@ -7365,8 +7368,7 @@
73657368
includeCurrentPageOption.setAttribute('value', 'currentPage');
73667369
mxUtils.write(includeCurrentPageOption, mxResources.get('currentPage'));
73677370
includeSelect.appendChild(includeCurrentPageOption);
7368-
7369-
7371+
73707372
if (pageCount > 1)
73717373
{
73727374
include.style.marginBottom = '12px';
@@ -7409,24 +7411,34 @@
74097411
cb5.style.marginBottom = '16px';
74107412
cb5.style.marginRight = '8px';
74117413
cb5.setAttribute('type', 'checkbox');
7414+
cb5.id = 'geCheckbox-' + Editor.guid();
74127415

74137416
var cb7 = document.createElement('input');
74147417
cb7.style.marginBottom = '16px';
74157418
cb7.style.marginRight = '8px';
74167419
cb7.setAttribute('type', 'checkbox');
7420+
cb7.id = 'geCheckbox-' + Editor.guid();
74177421

74187422
if (embedOption)
74197423
{
74207424
cb5.checked = (this.lastEmbedImages != null) ?
74217425
this.lastEmbedImages : true;
74227426
div.appendChild(cb5);
7423-
mxUtils.write(div, mxResources.get('embedImages'));
7427+
7428+
var lbl = document.createElement('label');
7429+
mxUtils.write(lbl, mxResources.get('embedImages'));
7430+
lbl.setAttribute('for', cb5.id);
7431+
div.appendChild(lbl);
74247432
mxUtils.br(div);
74257433

74267434
cb7.checked = (this.lastEmbedFonts != null) ?
74277435
this.lastEmbedImages : true;
74287436
div.appendChild(cb7);
7429-
mxUtils.write(div, mxResources.get('embedFonts'));
7437+
7438+
var lbl = document.createElement('label');
7439+
mxUtils.write(lbl, mxResources.get('embedFonts'));
7440+
lbl.setAttribute('for', cb7.id);
7441+
div.appendChild(lbl);
74307442
mxUtils.br(div);
74317443

74327444
height += 50;

0 commit comments

Comments
 (0)