|
|
@@ -327,10 +327,12 @@
|
|
|
{
|
|
|
if (graph.isEnabled())
|
|
|
{
|
|
|
- if (this.freehandWindow == null)
|
|
|
+ if (editorUi.freehandWindow == null)
|
|
|
{
|
|
|
var withBrush = !mxClient.IS_IE && !mxClient.IS_IE11;
|
|
|
- this.freehandWindow = new FreehandWindow(editorUi, document.body.offsetWidth - 420, 102, 176, withBrush? 120 : 84, withBrush);
|
|
|
+ editorUi.freehandWindow = new FreehandWindow(
|
|
|
+ editorUi, document.body.offsetWidth - 420, 102, 176,
|
|
|
+ withBrush? 120 : 84, withBrush);
|
|
|
}
|
|
|
|
|
|
if (graph.freehand.isDrawing())
|
|
|
@@ -342,7 +344,7 @@
|
|
|
graph.freehand.startDrawing();
|
|
|
}
|
|
|
|
|
|
- this.freehandWindow.window.setVisible(graph.freehand.isDrawing());
|
|
|
+ editorUi.freehandWindow.window.setVisible(graph.freehand.isDrawing());
|
|
|
}
|
|
|
}, null, null, 'X')).isEnabled = function()
|
|
|
{
|
|
|
@@ -1242,71 +1244,51 @@
|
|
|
var menubar = menusCreateMenuBar.apply(this, arguments);
|
|
|
|
|
|
if (menubar != null && urlParams['embed'] != '1' &&
|
|
|
- (uiTheme != 'atlas' || urlParams['live-ui'] == '1'))
|
|
|
+ (uiTheme != 'atlas' && urlParams['live-ui'] == '1'))
|
|
|
{
|
|
|
- var langMenu = this.get((urlParams['live-ui'] == '1') ? 'theme' : 'language');
|
|
|
+ var langMenu = this.get((urlParams['live-ui'] == '1') ?
|
|
|
+ 'appearance' : 'language');
|
|
|
|
|
|
if (langMenu != null)
|
|
|
{
|
|
|
var elt = menubar.addMenu('', langMenu.funct);
|
|
|
elt.setAttribute('title', mxResources.get(
|
|
|
(urlParams['live-ui'] == '1') ?
|
|
|
- 'preferences' : 'language'));
|
|
|
- elt.className = 'geAdaptiveAsset';
|
|
|
- elt.style.boxSizing = 'border-box';
|
|
|
- elt.style.width = '19px';
|
|
|
- elt.style.height = '19px';
|
|
|
- elt.style.paddingTop = '2px';
|
|
|
- elt.style.paddingLeft = '4px';
|
|
|
+ 'theme' : 'language'));
|
|
|
+ elt.className = 'geToolbarButton geAdaptiveAsset';
|
|
|
+ elt.style.backgroundImage = 'url(' + Editor.globeImage + ')';
|
|
|
+ elt.style.backgroundPosition = 'center center';
|
|
|
+ elt.style.backgroundRepeat = 'no-repeat';
|
|
|
+ elt.style.backgroundSize = '100% 100%';
|
|
|
+ elt.style.display = 'inline-block';
|
|
|
+ elt.style.verticalAlign = 'top';
|
|
|
+ elt.style.marginLeft = '2px';
|
|
|
+ elt.style.cursor = 'pointer';
|
|
|
elt.style.zIndex = '1';
|
|
|
+
|
|
|
+ // Depends on theme
|
|
|
elt.style.position = 'absolute';
|
|
|
- elt.style.display = 'block';
|
|
|
- elt.style.cursor = 'pointer';
|
|
|
- elt.style.right = '20px';
|
|
|
-
|
|
|
- if (uiTheme == 'min')
|
|
|
+ elt.style.height = '18px';
|
|
|
+ elt.style.width = '18px';
|
|
|
+
|
|
|
+ if (Editor.currentTheme == 'atlas')
|
|
|
{
|
|
|
- elt.style.top = '2px';
|
|
|
+ elt.style.filter = 'invert(100%)';
|
|
|
+ elt.style.right = '11px';
|
|
|
+ elt.style.top = '10px';
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
- elt.style.top = '0px';
|
|
|
- }
|
|
|
-
|
|
|
- var icon = document.createElement('div');
|
|
|
- icon.className = 'geToolbarButton';
|
|
|
- icon.style.backgroundImage = 'url(' + Editor.globeImage + ')';
|
|
|
- icon.style.backgroundPosition = 'center center';
|
|
|
- icon.style.backgroundRepeat = 'no-repeat';
|
|
|
- icon.style.backgroundSize = '100% 100%';
|
|
|
- icon.style.filter = 'none';
|
|
|
- icon.style.position = 'absolute';
|
|
|
- icon.style.height = '100%';
|
|
|
- icon.style.width = '100%';
|
|
|
- icon.style.marginTop = (uiTheme == 'atlas') ? '8px' : '2px';
|
|
|
- icon.style.marginLeft = '2px';
|
|
|
- icon.style.zIndex = '1';
|
|
|
- elt.appendChild(icon);
|
|
|
-
|
|
|
- if (urlParams['live-ui'] != '1')
|
|
|
- {
|
|
|
- mxUtils.setOpacity(elt, 70);
|
|
|
+ elt.style.right = '14px';
|
|
|
+ elt.style.top = '5px';
|
|
|
}
|
|
|
|
|
|
if (urlParams['winCtrls'] == '1')
|
|
|
{
|
|
|
elt.style.right = '95px';
|
|
|
- elt.style.width = '19px';
|
|
|
- elt.style.height = '19px';
|
|
|
elt.style.webkitAppRegion = 'no-drag';
|
|
|
icon.style.webkitAppRegion = 'no-drag';
|
|
|
}
|
|
|
-
|
|
|
- if (uiTheme == 'atlas')
|
|
|
- {
|
|
|
- elt.style.filter = 'invert(100%)';
|
|
|
- elt.style.opacity = '0.85';
|
|
|
- }
|
|
|
|
|
|
document.body.appendChild(elt);
|
|
|
menubar.langIcon = elt;
|
|
|
@@ -1315,13 +1297,17 @@
|
|
|
{
|
|
|
var updateThemeElement = mxUtils.bind(this, function()
|
|
|
{
|
|
|
- icon.style.backgroundImage = 'url(\'' + ((Editor.isDarkMode() || uiTheme == 'atlas') ?
|
|
|
- Editor.lightModeImage : Editor.darkModeImage) + '\')';
|
|
|
+ elt.style.backgroundImage = 'url(\'' + ((Editor.isDarkMode() || uiTheme == 'atlas') ?
|
|
|
+ Editor.darkModeImage : Editor.lightModeImage) + '\')';
|
|
|
});
|
|
|
|
|
|
this.editorUi.addListener('darkModeChanged', updateThemeElement);
|
|
|
updateThemeElement();
|
|
|
}
|
|
|
+ else
|
|
|
+ {
|
|
|
+ mxUtils.setOpacity(elt, 40);
|
|
|
+ }
|
|
|
|
|
|
this.editorUi.switchThemeElt = elt;
|
|
|
}
|
|
|
@@ -1398,6 +1384,22 @@
|
|
|
editorUi.showDialog(dlg.container, 620, 460, true, true);
|
|
|
dlg.init();
|
|
|
});
|
|
|
+
|
|
|
+ // Adds outline option to zoom menu
|
|
|
+ var viewZoomMenu = this.get('viewZoom');
|
|
|
+ var viewZoomMenuFunct = viewZoomMenu.funct;
|
|
|
+
|
|
|
+ viewZoomMenu.funct = mxUtils.bind(this, function(menu, parent)
|
|
|
+ {
|
|
|
+ viewZoomMenuFunct.apply(this, arguments);
|
|
|
+
|
|
|
+ var sketchTheme = Editor.currentTheme == 'sketch' || urlParams['sketch'] == '1';
|
|
|
+
|
|
|
+ if (sketchTheme || uiTheme == 'min')
|
|
|
+ {
|
|
|
+ this.addMenuItems(menu, ['-', 'outline', 'fullscreen'], parent);
|
|
|
+ }
|
|
|
+ });
|
|
|
|
|
|
var layoutMenu = this.get('layout');
|
|
|
var layoutMenuFunct = layoutMenu.funct;
|
|
|
@@ -2884,6 +2886,24 @@
|
|
|
}
|
|
|
}))).isEnabled = isGraphEnabled;
|
|
|
|
|
|
+ this.put('appearance', new Menu(mxUtils.bind(this, function(menu, parent)
|
|
|
+ {
|
|
|
+ if (Editor.isDarkMode() || (!mxClient.IS_IE && !mxClient.IS_IE11))
|
|
|
+ {
|
|
|
+ this.addMenuItems(menu, ['toggleDarkMode'], parent);
|
|
|
+ }
|
|
|
+
|
|
|
+ var item = menu.addItem(mxResources.get('simple'), null, function()
|
|
|
+ {
|
|
|
+ editorUi.setCurrentTheme((Editor.currentTheme == 'sketch') ? '' : 'sketch');
|
|
|
+ }, parent);
|
|
|
+
|
|
|
+ if (Editor.currentTheme == 'sketch')
|
|
|
+ {
|
|
|
+ menu.addCheckmark(item, Editor.checkmarkImage);
|
|
|
+ }
|
|
|
+ })));
|
|
|
+
|
|
|
this.put('theme', new Menu(mxUtils.bind(this, function(menu, parent)
|
|
|
{
|
|
|
var theme = (urlParams['sketch'] == '1') ? 'sketch' : mxSettings.getUi();
|
|
|
@@ -2896,14 +2916,24 @@
|
|
|
|
|
|
menu.addSeparator(parent);
|
|
|
|
|
|
- var item = menu.addItem(mxResources.get('default'), null, function()
|
|
|
+ var item = menu.addItem(mxResources.get('automatic'), null, function()
|
|
|
{
|
|
|
editorUi.setCurrentTheme('');
|
|
|
}, parent);
|
|
|
+
|
|
|
+ if (theme != 'kennedy' && theme != 'atlas' &&
|
|
|
+ theme != 'dark' && theme != 'min' &&
|
|
|
+ theme != 'sketch')
|
|
|
+ {
|
|
|
+ menu.addCheckmark(item, Editor.checkmarkImage);
|
|
|
+ }
|
|
|
+
|
|
|
+ item = menu.addItem(mxResources.get('default'), null, function()
|
|
|
+ {
|
|
|
+ editorUi.setCurrentTheme('kennedy');
|
|
|
+ }, parent);
|
|
|
|
|
|
- if (theme == 'kennedy' || theme == 'dark' ||
|
|
|
- (theme != 'atlas' && theme != 'min' &&
|
|
|
- theme != 'sketch'))
|
|
|
+ if (theme == 'kennedy' || theme == 'dark')
|
|
|
{
|
|
|
menu.addCheckmark(item, Editor.checkmarkImage);
|
|
|
}
|
|
|
@@ -3320,7 +3350,39 @@
|
|
|
graph.getInsertPoint() : null);
|
|
|
}
|
|
|
}, null, null, 'C')).isEnabled = isGraphEnabled;
|
|
|
+
|
|
|
+ var toggleFormat = editorUi.actions.put('toggleFormat', new Action(mxResources.get('format'), function()
|
|
|
+ {
|
|
|
+ if (editorUi.formatWindow != null)
|
|
|
+ {
|
|
|
+ editorUi.formatWindow.window.setVisible(
|
|
|
+ !editorUi.formatWindow.window.isVisible());
|
|
|
+ }
|
|
|
+ }));
|
|
|
+
|
|
|
+ toggleFormat.shortcut = editorUi.actions.get('formatPanel').shortcut;
|
|
|
+ toggleFormat.setToggleAction(true);
|
|
|
+ toggleFormat.setSelectedCallback(mxUtils.bind(this, function()
|
|
|
+ {
|
|
|
+ return editorUi.formatWindow != null && editorUi.formatWindow.window.isVisible();
|
|
|
+ }));
|
|
|
|
|
|
+ var toggleShapes = editorUi.actions.put('toggleShapes', new Action(mxResources.get('shapes'), function()
|
|
|
+ {
|
|
|
+ if (editorUi.sidebarWindow != null)
|
|
|
+ {
|
|
|
+ editorUi.sidebarWindow.window.setVisible(
|
|
|
+ !editorUi.sidebarWindow.window.isVisible());
|
|
|
+ }
|
|
|
+ }));
|
|
|
+
|
|
|
+ toggleShapes.shortcut = editorUi.actions.get('formatPanel').shortcut;
|
|
|
+ toggleShapes.setToggleAction(true);
|
|
|
+ toggleShapes.setSelectedCallback(mxUtils.bind(this, function()
|
|
|
+ {
|
|
|
+ return editorUi.sidebarWindow != null && editorUi.sidebarWindow.window.isVisible();
|
|
|
+ }));
|
|
|
+
|
|
|
editorUi.addInsertMenuItems = mxUtils.bind(this, function(menu, parent, methods)
|
|
|
{
|
|
|
for (var i = 0; i < methods.length; i++)
|
|
|
@@ -3338,18 +3400,49 @@
|
|
|
|
|
|
this.put('insert', new Menu(mxUtils.bind(this, function(menu, parent)
|
|
|
{
|
|
|
- this.addMenuItems(menu, ['insertRectangle', 'insertEllipse', 'insertRhombus',
|
|
|
- '-', 'insertEdge', 'insertNote', '-', 'insertText', 'insertLink',
|
|
|
- '-', 'createShape', 'insertFreehand', '-', 'insertImage'], parent);
|
|
|
+ // Compatiblity code for live UI switch and static UI
|
|
|
+ var sketchTheme = Editor.currentTheme == 'sketch' || urlParams['sketch'] == '1';
|
|
|
+
|
|
|
+ if (sketchTheme)
|
|
|
+ {
|
|
|
+ editorUi.menus.addMenuItems(menu, ['toggleShapes'], parent);
|
|
|
+ editorUi.menus.addSubmenu('table', menu, parent);
|
|
|
+ menu.addSeparator(parent);
|
|
|
|
|
|
- if (editorUi.insertTemplateEnabled && !editorUi.isOffline())
|
|
|
+ if (editorUi.insertTemplateEnabled && !editorUi.isOffline())
|
|
|
+ {
|
|
|
+ editorUi.menus.addMenuItems(menu, ['insertTemplate'], parent);
|
|
|
+ }
|
|
|
+
|
|
|
+ editorUi.menus.addMenuItems(menu, ['insertImage', 'insertLink', '-'], parent);
|
|
|
+ editorUi.menus.addSubmenu('insertAdvanced', menu, parent, mxResources.get('advanced'));
|
|
|
+ editorUi.menus.addSubmenu('layout', menu, parent);
|
|
|
+ }
|
|
|
+ else
|
|
|
{
|
|
|
- this.addMenuItems(menu, ['insertTemplate'], parent);
|
|
|
+ this.addMenuItems(menu, ['insertRectangle', 'insertEllipse', 'insertRhombus',
|
|
|
+ '-', 'insertEdge', 'insertNote', '-', 'insertText', 'insertLink',
|
|
|
+ '-', 'createShape', 'insertFreehand', '-', 'insertImage'], parent);
|
|
|
+
|
|
|
+ if (editorUi.insertTemplateEnabled && !editorUi.isOffline())
|
|
|
+ {
|
|
|
+ this.addMenuItems(menu, ['insertTemplate'], parent);
|
|
|
+ }
|
|
|
+
|
|
|
+ menu.addSeparator(parent);
|
|
|
+ this.addSubmenu('insertLayout', menu, parent, mxResources.get('layout'));
|
|
|
+ this.addSubmenu('insertAdvanced', menu, parent, mxResources.get('advanced'));
|
|
|
+
|
|
|
+ if (uiTheme == 'min')
|
|
|
+ {
|
|
|
+ this.addSubmenu('table', menu, parent);
|
|
|
+ }
|
|
|
}
|
|
|
-
|
|
|
- menu.addSeparator(parent);
|
|
|
- this.addSubmenu('insertLayout', menu, parent, mxResources.get('layout'));
|
|
|
- this.addSubmenu('insertAdvanced', menu, parent, mxResources.get('advanced'));
|
|
|
+ })));
|
|
|
+
|
|
|
+ this.put('table', new Menu(mxUtils.bind(this, function(menu, parent)
|
|
|
+ {
|
|
|
+ editorUi.menus.addInsertTableCellItem(menu, parent);
|
|
|
})));
|
|
|
|
|
|
this.put('insertLayout', new Menu(mxUtils.bind(this, function(menu, parent)
|
|
|
@@ -3966,136 +4059,386 @@
|
|
|
dlg.init();
|
|
|
});
|
|
|
}
|
|
|
+
|
|
|
+ var langMenu = this.get('language');
|
|
|
|
|
|
this.put('extras', new Menu(mxUtils.bind(this, function(menu, parent)
|
|
|
{
|
|
|
- if (urlParams['embed'] != '1' || urlParams['lang'] == null)
|
|
|
+ // Compatiblity code for live UI switch and static UI
|
|
|
+ var sketchTheme = Editor.currentTheme == 'sketch' || urlParams['sketch'] == '1';
|
|
|
+
|
|
|
+ if (sketchTheme || uiTheme == 'min')
|
|
|
{
|
|
|
- this.addSubmenu('language', menu, parent);
|
|
|
+ if (langMenu != null && (urlParams['embed'] != '1' || urlParams['lang'] == null))
|
|
|
+ {
|
|
|
+ editorUi.menus.addSubmenu('language', menu, parent);
|
|
|
+ }
|
|
|
+
|
|
|
+ if (urlParams['embed'] != '1' && urlParams['extAuth'] != '1' && editorUi.mode != App.MODE_ATLAS)
|
|
|
+ {
|
|
|
+ editorUi.menus.addSubmenu('theme', menu, parent);
|
|
|
+ }
|
|
|
+
|
|
|
+ editorUi.menus.addSubmenu('units', menu, parent);
|
|
|
+ menu.addSeparator(parent);
|
|
|
+
|
|
|
+ if (!sketchTheme)
|
|
|
+ {
|
|
|
+ editorUi.menus.addMenuItems(menu, ['scrollbars', '-', 'tooltips',
|
|
|
+ 'copyConnect', 'collapseExpand'], parent);
|
|
|
+ }
|
|
|
+
|
|
|
+ if (urlParams['embedInline'] != '1' && !sketchTheme && urlParams['embed'] != '1' &&
|
|
|
+ (isLocalStorage || mxClient.IS_CHROMEAPP) && editorUi.mode != App.MODE_ATLAS)
|
|
|
+ {
|
|
|
+ editorUi.menus.addMenuItems(menu, ['-', 'showStartScreen', 'search', 'scratchpad'], parent);
|
|
|
+ }
|
|
|
+
|
|
|
+ menu.addSeparator(parent);
|
|
|
+
|
|
|
+ if (sketchTheme)
|
|
|
+ {
|
|
|
+ editorUi.menus.addMenuItems(menu, ['copyConnect',
|
|
|
+ 'collapseExpand', 'tooltips', '-'], parent);
|
|
|
+ }
|
|
|
+
|
|
|
+ if (EditorUi.isElectronApp)
|
|
|
+ {
|
|
|
+ editorUi.menus.addMenuItems(menu, ['-',
|
|
|
+ 'spellCheck', 'autoBkp',
|
|
|
+ 'drafts', '-'], parent);
|
|
|
+ }
|
|
|
+
|
|
|
+ var file = editorUi.getCurrentFile();
|
|
|
+
|
|
|
+ if (file != null && file.isRealtimeEnabled() && file.isRealtimeSupported())
|
|
|
+ {
|
|
|
+ this.addMenuItems(menu, ['-', 'showRemoteCursors',
|
|
|
+ 'shareCursor', '-'], parent);
|
|
|
+ }
|
|
|
+
|
|
|
+ if (Graph.translateDiagram)
|
|
|
+ {
|
|
|
+ editorUi.menus.addMenuItems(menu, ['diagramLanguage'], parent);
|
|
|
+ }
|
|
|
+
|
|
|
+ if (editorUi.mode != App.MODE_ATLAS)
|
|
|
+ {
|
|
|
+ editorUi.menus.addMenuItem(menu, 'configuration', parent);
|
|
|
+ }
|
|
|
+
|
|
|
+ if (!sketchTheme)
|
|
|
+ {
|
|
|
+ if (!editorUi.isOfflineApp() && isLocalStorage && editorUi.mode != App.MODE_ATLAS)
|
|
|
+ {
|
|
|
+ editorUi.menus.addMenuItem(menu, 'plugins', parent);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // Adds trailing separator in case new plugin entries are added
|
|
|
+ menu.addSeparator(parent);
|
|
|
}
|
|
|
-
|
|
|
- if (urlParams['embed'] != '1')
|
|
|
+ else
|
|
|
{
|
|
|
- this.addSubmenu('theme', menu, parent);
|
|
|
+ if (urlParams['embed'] != '1' || urlParams['lang'] == null)
|
|
|
+ {
|
|
|
+ this.addSubmenu('language', menu, parent);
|
|
|
+ }
|
|
|
+
|
|
|
+ if (urlParams['embed'] != '1')
|
|
|
+ {
|
|
|
+ this.addSubmenu('theme', menu, parent);
|
|
|
+ }
|
|
|
+
|
|
|
+ menu.addSeparator(parent);
|
|
|
+
|
|
|
+ if (typeof(MathJax) !== 'undefined')
|
|
|
+ {
|
|
|
+ var item = this.addMenuItem(menu, 'mathematicalTypesetting', parent);
|
|
|
+
|
|
|
+ if (!editorUi.isOffline() || mxClient.IS_CHROMEAPP || EditorUi.isElectronApp)
|
|
|
+ {
|
|
|
+ this.addLinkToItem(item, 'https://www.diagrams.net/doc/faq/math-typesetting');
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if (EditorUi.isElectronApp)
|
|
|
+ {
|
|
|
+ this.addMenuItems(menu, ['spellCheck', 'autoBkp', 'drafts'], parent);
|
|
|
+ }
|
|
|
+
|
|
|
+ this.addMenuItems(menu, ['copyConnect', 'collapseExpand', '-'], parent);
|
|
|
+
|
|
|
+ if (urlParams['embed'] != '1')
|
|
|
+ {
|
|
|
+ var file = editorUi.getCurrentFile();
|
|
|
+
|
|
|
+ if (file != null && file.isRealtimeEnabled() && file.isRealtimeSupported())
|
|
|
+ {
|
|
|
+ this.addMenuItems(menu, ['showRemoteCursors',
|
|
|
+ 'shareCursor'], parent);
|
|
|
+ }
|
|
|
+
|
|
|
+ this.addMenuItems(menu, ['autosave'], parent);
|
|
|
+ }
|
|
|
+
|
|
|
+ menu.addSeparator(parent);
|
|
|
+
|
|
|
+ if (!editorUi.isOfflineApp() && isLocalStorage)
|
|
|
+ {
|
|
|
+ this.addMenuItem(menu, 'plugins', parent);
|
|
|
+ }
|
|
|
+
|
|
|
+ this.addMenuItems(menu, ['-', 'editDiagram'], parent);
|
|
|
+
|
|
|
+ if (Graph.translateDiagram)
|
|
|
+ {
|
|
|
+ this.addMenuItems(menu, ['diagramLanguage']);
|
|
|
+ }
|
|
|
+
|
|
|
+ menu.addSeparator(parent);
|
|
|
+
|
|
|
+ if (urlParams['embed'] != '1' && (isLocalStorage || mxClient.IS_CHROMEAPP))
|
|
|
+ {
|
|
|
+ this.addMenuItems(menu, ['showStartScreen'], parent);
|
|
|
+ }
|
|
|
+
|
|
|
+ this.addMenuItems(menu, ['configuration'], parent);
|
|
|
+
|
|
|
+ // Adds trailing separator in case new plugin entries are added
|
|
|
+ menu.addSeparator(parent);
|
|
|
+
|
|
|
+ if (urlParams['newTempDlg'] == '1')
|
|
|
+ {
|
|
|
+ editorUi.actions.addAction('templates', function()
|
|
|
+ {
|
|
|
+ function driveObjToTempDlg(item)
|
|
|
+ {
|
|
|
+ return {id: item.id, isExt: true, url: item.downloadUrl, title: item.title, imgUrl: item.thumbnailLink,
|
|
|
+ changedBy: item.lastModifyingUserName, lastModifiedOn: item.modifiedDate}
|
|
|
+ };
|
|
|
+
|
|
|
+ var tempDlg = new TemplatesDialog(editorUi, function(xml){console.log(arguments)}, null,
|
|
|
+ null, null, 'user', function(callback, error, username)
|
|
|
+ {
|
|
|
+ var oneWeek = new Date();
|
|
|
+ oneWeek.setDate(oneWeek.getDate() - 7);
|
|
|
+
|
|
|
+ editorUi.drive.listFiles(null, oneWeek, username? true : false, function(resp)
|
|
|
+ {
|
|
|
+ var results = [];
|
|
|
+
|
|
|
+ for (var i = 0; i < resp.items.length; i++)
|
|
|
+ {
|
|
|
+ results.push(driveObjToTempDlg(resp.items[i]));
|
|
|
+ }
|
|
|
+
|
|
|
+ callback(results);
|
|
|
+ }, error)
|
|
|
+ }, function(str, callback, error, username)
|
|
|
+ {
|
|
|
+ editorUi.drive.listFiles(str, null, username? true : false, function(resp)
|
|
|
+ {
|
|
|
+ var results = [];
|
|
|
+
|
|
|
+ for (var i = 0; i < resp.items.length; i++)
|
|
|
+ {
|
|
|
+ results.push(driveObjToTempDlg(resp.items[i]));
|
|
|
+ }
|
|
|
+
|
|
|
+ callback(results);
|
|
|
+ }, error)
|
|
|
+ }, function(obj, callback, error)
|
|
|
+ {
|
|
|
+ editorUi.drive.getFile(obj.id, function(file)
|
|
|
+ {
|
|
|
+ callback(file.data);
|
|
|
+ }, error);
|
|
|
+ }, null, function(callback)
|
|
|
+ {
|
|
|
+ callback({'Test': []}, 1);
|
|
|
+ }, true, false);
|
|
|
+
|
|
|
+ editorUi.showDialog(tempDlg.container, window.innerWidth, window.innerHeight, true, false, null, false, true);
|
|
|
+ });
|
|
|
+ this.addMenuItem(menu, 'templates', parent);
|
|
|
+ }
|
|
|
}
|
|
|
+ })));
|
|
|
|
|
|
+ this.put('diagram', new Menu(mxUtils.bind(this, function(menu, parent)
|
|
|
+ {
|
|
|
+ var file = editorUi.getCurrentFile();
|
|
|
+ editorUi.menus.addSubmenu('extras', menu, parent, mxResources.get('preferences'));
|
|
|
menu.addSeparator(parent);
|
|
|
|
|
|
- if (typeof(MathJax) !== 'undefined')
|
|
|
+ // Compatiblity code for live UI switch and static UI
|
|
|
+ var sketchTheme = Editor.currentTheme == 'sketch' || urlParams['sketch'] == '1';
|
|
|
+
|
|
|
+ if (mxClient.IS_CHROMEAPP || EditorUi.isElectronApp)
|
|
|
{
|
|
|
- var item = this.addMenuItem(menu, 'mathematicalTypesetting', parent);
|
|
|
+ editorUi.menus.addMenuItems(menu, ['new', 'open', '-', 'synchronize',
|
|
|
+ '-', 'save', 'saveAs', '-'], parent);
|
|
|
+ }
|
|
|
+ else if (urlParams['embed'] == '1' || editorUi.mode == App.MODE_ATLAS)
|
|
|
+ {
|
|
|
+ if (urlParams['noSaveBtn'] != '1' &&
|
|
|
+ urlParams['embedInline'] != '1')
|
|
|
+ {
|
|
|
+ editorUi.menus.addMenuItems(menu, ['-', 'save'], parent);
|
|
|
+ }
|
|
|
|
|
|
- if (!editorUi.isOffline() || mxClient.IS_CHROMEAPP || EditorUi.isElectronApp)
|
|
|
+ if (urlParams['saveAndExit'] == '1' ||
|
|
|
+ (urlParams['noSaveBtn'] == '1' &&
|
|
|
+ urlParams['saveAndExit'] != '0') || editorUi.mode == App.MODE_ATLAS)
|
|
|
{
|
|
|
- this.addLinkToItem(item, 'https://www.diagrams.net/doc/faq/math-typesetting');
|
|
|
+ editorUi.menus.addMenuItems(menu, ['saveAndExit'], parent);
|
|
|
+
|
|
|
+ if (file != null && file.isRevisionHistorySupported())
|
|
|
+ {
|
|
|
+ editorUi.menus.addMenuItems(menu, ['revisionHistory'], parent);
|
|
|
+ }
|
|
|
}
|
|
|
+
|
|
|
+ menu.addSeparator(parent);
|
|
|
}
|
|
|
-
|
|
|
- if (EditorUi.isElectronApp)
|
|
|
+ else if (editorUi.mode == App.MODE_ATLAS)
|
|
|
{
|
|
|
- this.addMenuItems(menu, ['spellCheck', 'autoBkp', 'drafts'], parent);
|
|
|
+ editorUi.menus.addMenuItems(menu, ['save', 'synchronize', '-'], parent);
|
|
|
}
|
|
|
-
|
|
|
- this.addMenuItems(menu, ['copyConnect', 'collapseExpand', '-'], parent);
|
|
|
-
|
|
|
- if (urlParams['embed'] != '1')
|
|
|
+ else if (urlParams['noFileMenu'] != '1')
|
|
|
{
|
|
|
- var file = editorUi.getCurrentFile();
|
|
|
-
|
|
|
- if (file != null && file.isRealtimeEnabled() && file.isRealtimeSupported())
|
|
|
+ if (!sketchTheme)
|
|
|
{
|
|
|
- this.addMenuItems(menu, ['showRemoteCursors',
|
|
|
- 'shareCursor'], parent);
|
|
|
+ editorUi.menus.addMenuItems(menu, ['new'], parent);
|
|
|
+ editorUi.menus.addSubmenu('openFrom', menu, parent);
|
|
|
+
|
|
|
+ if (isLocalStorage)
|
|
|
+ {
|
|
|
+ this.addSubmenu('openRecent', menu, parent);
|
|
|
+ }
|
|
|
+
|
|
|
+ menu.addSeparator(parent);
|
|
|
+
|
|
|
+ if (file != null)
|
|
|
+ {
|
|
|
+ if (file.constructor == DriveFile)
|
|
|
+ {
|
|
|
+ editorUi.menus.addMenuItems(menu, ['share'], parent);
|
|
|
+ }
|
|
|
+
|
|
|
+ if (!mxClient.IS_CHROMEAPP && !EditorUi.isElectronApp &&
|
|
|
+ file.constructor != LocalFile)
|
|
|
+ {
|
|
|
+ editorUi.menus.addMenuItems(menu, ['synchronize'], parent);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ menu.addSeparator(parent);
|
|
|
+ editorUi.menus.addSubmenu('save', menu, parent);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ editorUi.menus.addSubmenu('file', menu, parent);
|
|
|
}
|
|
|
-
|
|
|
- this.addMenuItems(menu, ['autosave'], parent);
|
|
|
}
|
|
|
-
|
|
|
- menu.addSeparator(parent);
|
|
|
|
|
|
- if (!editorUi.isOfflineApp() && isLocalStorage)
|
|
|
+ editorUi.menus.addSubmenu('exportAs', menu, parent);
|
|
|
+
|
|
|
+ if (mxClient.IS_CHROMEAPP || EditorUi.isElectronApp)
|
|
|
{
|
|
|
- this.addMenuItem(menu, 'plugins', parent);
|
|
|
+ editorUi.menus.addMenuItems(menu, ['import'], parent);
|
|
|
}
|
|
|
-
|
|
|
- this.addMenuItems(menu, ['-', 'editDiagram'], parent);
|
|
|
+ else if (urlParams['noFileMenu'] != '1')
|
|
|
+ {
|
|
|
+ editorUi.menus.addSubmenu('importFrom', menu, parent);
|
|
|
+ }
|
|
|
+
|
|
|
+ editorUi.menus.addMenuItems(menu, ['-', 'findReplace'], parent);
|
|
|
|
|
|
- if (Graph.translateDiagram)
|
|
|
+ if (editorUi.commentsSupported())
|
|
|
{
|
|
|
- this.addMenuItems(menu, ['diagramLanguage']);
|
|
|
+ editorUi.menus.addMenuItems(menu, ['comments', '-'], parent);
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
+ editorUi.menus.addMenuItems(menu, ['toggleFormat', 'layers', 'tags', '-', 'pageSetup'], parent);
|
|
|
+
|
|
|
+ // Cannot use print in standalone mode on iOS as we cannot open new windows
|
|
|
+ if (urlParams['noFileMenu'] != '1' && (!mxClient.IS_IOS || !navigator.standalone))
|
|
|
+ {
|
|
|
+ editorUi.menus.addMenuItems(menu, ['print'], parent);
|
|
|
+ }
|
|
|
+
|
|
|
+ if (!sketchTheme)
|
|
|
+ {
|
|
|
+ if (file != null && editorUi.fileNode != null && urlParams['embedInline'] != '1')
|
|
|
+ {
|
|
|
+ var filename = (file.getTitle() != null) ?
|
|
|
+ file.getTitle() : editorUi.defaultFilename;
|
|
|
+
|
|
|
+ if (!/(\.html)$/i.test(filename) &&
|
|
|
+ !/(\.svg)$/i.test(filename))
|
|
|
+ {
|
|
|
+ this.addMenuItems(menu, ['-', 'properties']);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
menu.addSeparator(parent);
|
|
|
-
|
|
|
- if (urlParams['embed'] != '1' && (isLocalStorage || mxClient.IS_CHROMEAPP))
|
|
|
+ editorUi.menus.addSubmenu('help', menu, parent);
|
|
|
+
|
|
|
+ if (urlParams['embed'] == '1' || editorUi.mode == App.MODE_ATLAS)
|
|
|
{
|
|
|
- this.addMenuItems(menu, ['showStartScreen'], parent);
|
|
|
+ if (urlParams['noExitBtn'] != '1' || editorUi.mode == App.MODE_ATLAS)
|
|
|
+ {
|
|
|
+ editorUi.menus.addMenuItems(menu, ['-', 'exit'], parent);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else if (urlParams['noFileMenu'] != '1')
|
|
|
+ {
|
|
|
+ editorUi.menus.addMenuItems(menu, ['-', 'close']);
|
|
|
}
|
|
|
+ })));
|
|
|
|
|
|
- this.addMenuItems(menu, ['configuration'], parent);
|
|
|
-
|
|
|
- // Adds trailing separator in case new plugin entries are added
|
|
|
- menu.addSeparator(parent);
|
|
|
+ this.put('save', new Menu(mxUtils.bind(this, function(menu, parent)
|
|
|
+ {
|
|
|
+ var file = editorUi.getCurrentFile();
|
|
|
|
|
|
- if (urlParams['newTempDlg'] == '1')
|
|
|
+ if (file != null && file.constructor == DriveFile)
|
|
|
+ {
|
|
|
+ editorUi.menus.addMenuItems(menu, ['save', 'makeCopy', '-', 'rename', 'moveToFolder'], parent);
|
|
|
+ }
|
|
|
+ else
|
|
|
{
|
|
|
- editorUi.actions.addAction('templates', function()
|
|
|
+ editorUi.menus.addMenuItems(menu, ['save', 'saveAs', '-', 'rename'], parent);
|
|
|
+
|
|
|
+ if (editorUi.isOfflineApp())
|
|
|
{
|
|
|
- function driveObjToTempDlg(item)
|
|
|
- {
|
|
|
- return {id: item.id, isExt: true, url: item.downloadUrl, title: item.title, imgUrl: item.thumbnailLink,
|
|
|
- changedBy: item.lastModifyingUserName, lastModifiedOn: item.modifiedDate}
|
|
|
- };
|
|
|
-
|
|
|
- var tempDlg = new TemplatesDialog(editorUi, function(xml){console.log(arguments)}, null,
|
|
|
- null, null, 'user', function(callback, error, username)
|
|
|
- {
|
|
|
- var oneWeek = new Date();
|
|
|
- oneWeek.setDate(oneWeek.getDate() - 7);
|
|
|
-
|
|
|
- editorUi.drive.listFiles(null, oneWeek, username? true : false, function(resp)
|
|
|
- {
|
|
|
- var results = [];
|
|
|
-
|
|
|
- for (var i = 0; i < resp.items.length; i++)
|
|
|
- {
|
|
|
- results.push(driveObjToTempDlg(resp.items[i]));
|
|
|
- }
|
|
|
-
|
|
|
- callback(results);
|
|
|
- }, error)
|
|
|
- }, function(str, callback, error, username)
|
|
|
- {
|
|
|
- editorUi.drive.listFiles(str, null, username? true : false, function(resp)
|
|
|
- {
|
|
|
- var results = [];
|
|
|
-
|
|
|
- for (var i = 0; i < resp.items.length; i++)
|
|
|
- {
|
|
|
- results.push(driveObjToTempDlg(resp.items[i]));
|
|
|
- }
|
|
|
-
|
|
|
- callback(results);
|
|
|
- }, error)
|
|
|
- }, function(obj, callback, error)
|
|
|
- {
|
|
|
- editorUi.drive.getFile(obj.id, function(file)
|
|
|
- {
|
|
|
- callback(file.data);
|
|
|
- }, error);
|
|
|
- }, null, function(callback)
|
|
|
+ if (navigator.onLine && urlParams['stealth'] != '1' && urlParams['lockdown'] != '1')
|
|
|
{
|
|
|
- callback({'Test': []}, 1);
|
|
|
- }, true, false);
|
|
|
-
|
|
|
- editorUi.showDialog(tempDlg.container, window.innerWidth, window.innerHeight, true, false, null, false, true);
|
|
|
- });
|
|
|
- this.addMenuItem(menu, 'templates', parent);
|
|
|
+ this.addMenuItems(menu, ['upload'], parent);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ editorUi.menus.addMenuItems(menu, ['makeCopy'], parent);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ editorUi.menus.addMenuItems(menu, ['-', 'autosave'], parent);
|
|
|
+
|
|
|
+ if (file != null && file.isRevisionHistorySupported())
|
|
|
+ {
|
|
|
+ editorUi.menus.addMenuItems(menu, ['-', 'revisionHistory'], parent);
|
|
|
}
|
|
|
})));
|
|
|
|
|
|
this.put('file', new Menu(mxUtils.bind(this, function(menu, parent)
|
|
|
{
|
|
|
+ // Compatiblity code for live UI switch and static UI
|
|
|
+ var minTheme = Editor.currentTheme == 'sketch' || uiTheme == 'min' ||
|
|
|
+ Editor.currentTheme == 'min';
|
|
|
+
|
|
|
if (urlParams['embed'] == '1')
|
|
|
{
|
|
|
this.addSubmenu('importFrom', menu, parent);
|
|
|
@@ -4141,6 +4484,83 @@
|
|
|
this.addMenuItems(menu, ['exit'], parent);
|
|
|
}
|
|
|
}
|
|
|
+ else if (minTheme)
|
|
|
+ {
|
|
|
+ var file = editorUi.getCurrentFile();
|
|
|
+ editorUi.menus.addMenuItems(menu, ['new'], parent);
|
|
|
+ editorUi.menus.addSubmenu('openFrom', menu, parent);
|
|
|
+
|
|
|
+ if (isLocalStorage)
|
|
|
+ {
|
|
|
+ this.addSubmenu('openRecent', menu, parent);
|
|
|
+ }
|
|
|
+
|
|
|
+ menu.addSeparator(parent);
|
|
|
+
|
|
|
+ editorUi.menus.addMenuItems(menu, ['-', 'save'], parent);
|
|
|
+
|
|
|
+ if (file == null || file.constructor != DriveFile)
|
|
|
+ {
|
|
|
+ editorUi.menus.addMenuItems(menu, ['saveAs'], parent);
|
|
|
+ }
|
|
|
+
|
|
|
+ if (!mxClient.IS_CHROMEAPP && !EditorUi.isElectronApp &&
|
|
|
+ file != null && (file.constructor != LocalFile ||
|
|
|
+ file.fileHandle != null))
|
|
|
+ {
|
|
|
+ editorUi.menus.addMenuItems(menu, ['synchronize'], parent);
|
|
|
+ }
|
|
|
+
|
|
|
+ if (file != null && file.constructor == DriveFile)
|
|
|
+ {
|
|
|
+ editorUi.menus.addMenuItems(menu, ['-', 'rename', 'makeCopy',
|
|
|
+ '-', 'moveToFolder', 'openFolder'], parent);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ editorUi.menus.addMenuItems(menu, ['-', 'rename'], parent);
|
|
|
+
|
|
|
+ if (editorUi.isOfflineApp())
|
|
|
+ {
|
|
|
+ if (navigator.onLine && urlParams['stealth'] != '1' && urlParams['lockdown'] != '1')
|
|
|
+ {
|
|
|
+ this.addMenuItems(menu, ['upload'], parent);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ editorUi.menus.addMenuItems(menu, ['makeCopy'], parent);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if (file != null && file.isRevisionHistorySupported())
|
|
|
+ {
|
|
|
+ editorUi.menus.addMenuItems(menu, ['-', 'revisionHistory'], parent);
|
|
|
+ }
|
|
|
+
|
|
|
+ if (file != null)
|
|
|
+ {
|
|
|
+ if (editorUi.fileNode != null && urlParams['embedInline'] != '1')
|
|
|
+ {
|
|
|
+ var filename = (file.getTitle() != null) ?
|
|
|
+ file.getTitle() : editorUi.defaultFilename;
|
|
|
+
|
|
|
+ if ((file.constructor == DriveFile && file.sync != null &&
|
|
|
+ file.sync.isConnected()) || (!/(\.html)$/i.test(filename) &&
|
|
|
+ !/(\.svg)$/i.test(filename)))
|
|
|
+ {
|
|
|
+ this.addMenuItems(menu, ['properties'], parent);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if (file.constructor == DriveFile)
|
|
|
+ {
|
|
|
+ editorUi.menus.addMenuItems(menu, ['share'], parent);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ editorUi.menus.addMenuItems(menu, ['-', 'autosave'], parent);
|
|
|
+ }
|
|
|
else
|
|
|
{
|
|
|
var file = this.editorUi.getCurrentFile();
|