| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103 |
- /**
- * Installing theme.
- */
- Editor.themes.push('min');
- /**
- * Testing dockable windows.
- */
- EditorUi.windowed = urlParams['windows'] != '0';
- /**
- * Code for the minimal UI theme.
- */
- EditorUi.initMinimalTheme = function()
- {
- // Disabled in lightbox and chromeless mode
- if (urlParams['lightbox'] == '1' || urlParams['chrome'] == '0' || typeof window.Format === 'undefined' || typeof window.Menus === 'undefined')
- {
- window.uiTheme = null;
-
- return;
- }
-
- var iw = 0;
- try
- {
- iw = window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth;
- }
- catch (e)
- {
- // ignore
- }
- Menus.prototype.autoPopup = false;
- function toggleFormat(ui, visible)
- {
- if (EditorUi.windowed)
- {
- var graph = ui.editor.graph;
- graph.popupMenuHandler.hideMenu();
-
- if (ui.formatWindow == null)
- {
- var x = Math.max(10, ui.diagramContainer.clientWidth - 248);
- var y = 60;
- var h = Math.min(566,graph.container.clientHeight - 10);
-
- ui.formatWindow = new WrapperWindow(ui, mxResources.get('format'), x, y, 240, h,
- function(container)
- {
- var format = ui.createFormat(container);
- format.init();
- });
- ui.formatWindow.window.addListener(mxEvent.SHOW, mxUtils.bind(this, function()
- {
- ui.formatWindow.window.fit();
- }));
-
- ui.formatWindow.window.minimumSize = new mxRectangle(0, 0, 240, 80);
- }
- else
- {
- ui.formatWindow.window.setVisible((visible != null) ?
- visible : !ui.formatWindow.window.isVisible());
- }
- }
- else
- {
- if (ui.formatElt == null)
- {
- ui.formatElt = ui.createSidebarContainer();
- var format = ui.createFormat(ui.formatElt);
- format.init();
- ui.formatElt.style.border = 'none';
- ui.formatElt.style.width = '240px';
- ui.formatElt.style.borderLeft = '1px solid gray';
- ui.formatElt.style.right = '0px';
- }
- var wrapper = ui.diagramContainer.parentNode;
- if (ui.formatElt.parentNode != null)
- {
- ui.formatElt.parentNode.removeChild(ui.formatElt);
- wrapper.style.right = '0px';
- }
- else
- {
- wrapper.parentNode.appendChild(ui.formatElt);
- wrapper.style.right = ui.formatElt.style.width;
- }
- }
- };
- function createSidebar(ui, container)
- {
- var css = 'position:absolute;border-width:1px;cusor:pointer;border-style:none;' +
- 'height:24px;bottom:0px;text-align:center;padding:8px 6px 0 6px;border-top-style:solid;' +
- 'width:50%;height:32px;box-sizing:border-box;font-size:11px;';
- var menuObj = new Menubar(ui, container);
-
- function addMenu(id, label)
- {
- var menu = ui.menus.get(id);
-
- var elt = menuObj.addMenu(label, mxUtils.bind(this, function()
- {
- // Allows extensions of menu.functid
- menu.funct.apply(this, arguments);
- }));
-
- elt.setAttribute('title', label);
- elt.style.cssText = css;
- elt.className = 'geTitle';
- container.appendChild(elt);
-
- return elt;
- };
-
- if (Editor.enableCustomLibraries && (urlParams['embed'] != '1' || urlParams['libraries'] == '1'))
- {
- // Defined in native apps together with openLibrary
- if (ui.actions.get('newLibrary') != null)
- {
- var div = document.createElement('div');
- div.style.cssText = css;
- div.className = 'geTitle';
- mxUtils.write(div, mxResources.get('newLibrary'));
- container.appendChild(div);
-
- mxEvent.addListener(div, 'click', this.actions.get('newLibrary').funct);
-
- var div = div.cloneNode(false);
- div.style.left = '50%';
- div.style.borderLeftStyle = 'solid';
- mxUtils.write(div, mxResources.get('openLibrary'));
- container.appendChild(div);
-
- mxEvent.addListener(div, 'click', this.actions.get('openLibrary').funct);
- }
- else
- {
- var elt = addMenu('newLibrary', mxResources.get('newLibrary'));
- elt.style.display = 'block';
- elt.style.fontSize = '11px';
- elt.style.left = '0';
-
- var elt = addMenu('openLibraryFrom', mxResources.get('openLibraryFrom'));
- elt.style.borderLeftStyle = 'solid';
- elt.style.display = 'block';
- elt.style.fontSize = '11px';
- elt.style.left = '50%';
- }
- }
- container.appendChild(ui.sidebar.container);
- container.style.overflow = 'hidden';
- };
- function toggleShapes(ui, visible)
- {
- if (EditorUi.windowed)
- {
- var graph = ui.editor.graph;
- graph.popupMenuHandler.hideMenu();
-
- if (ui.sidebarWindow == null)
- {
- var w = Math.min(graph.container.clientWidth - 10, 218);
- var h = Math.min(graph.container.clientHeight - 40, 650);
-
- ui.sidebarWindow = new WrapperWindow(ui, mxResources.get('shapes'),
- 10, 56, w - 6, h - 6, function(container)
- {
- createSidebar(ui, container);
- });
-
- ui.sidebarWindow.window.addListener(mxEvent.SHOW, mxUtils.bind(this, function()
- {
- ui.sidebarWindow.window.fit();
- }));
-
- ui.sidebarWindow.window.minimumSize = new mxRectangle(0, 0, 90, 90);
- ui.sidebarWindow.window.setVisible(true);
- if (isLocalStorage)
- {
- ui.getLocalData('sidebar', function(value)
- {
- ui.sidebar.showEntries(value, null, true);
- });
- }
-
- ui.restoreLibraries();
- }
- else
- {
- ui.sidebarWindow.window.setVisible((visible != null) ?
- visible : !ui.sidebarWindow.window.isVisible());
- }
- }
- else
- {
- if (ui.sidebarElt == null)
- {
- ui.sidebarElt = ui.createSidebarContainer();
- createSidebar(ui, ui.sidebarElt);
- ui.sidebarElt.style.border = 'none';
- ui.sidebarElt.style.width = '210px';
- ui.sidebarElt.style.borderRight = '1px solid gray';
- }
- var wrapper = ui.diagramContainer.parentNode;
- if (ui.sidebarElt.parentNode != null)
- {
- ui.sidebarElt.parentNode.removeChild(ui.sidebarElt);
- wrapper.style.left = '0px';
- }
- else
- {
- wrapper.parentNode.appendChild(ui.sidebarElt);
- wrapper.style.left = ui.sidebarElt.style.width;
- }
- }
- };
-
- // Changes colors for some UI elements
- var fill = '#29b6f2';
- Editor.checkmarkImage = Graph.createSvgImage(22, 18, '<path transform="translate(4 0)" d="M7.181,15.007a1,1,0,0,1-.793-0.391L3.222,10.5A1,1,0,1,1,4.808,9.274L7.132,12.3l6.044-8.86A1,1,0,1,1,14.83,4.569l-6.823,10a1,1,0,0,1-.8.437H7.181Z" fill="' + fill + '"/>').src;
- mxConstraintHandler.prototype.pointImage = Graph.createSvgImage(5, 5,
- '<path d="m 0 0 L 5 5 M 0 5 L 5 0" stroke-width="2" style="stroke-opacity:0.4" stroke="#ffffff"/>' +
- '<path d="m 0 0 L 5 5 M 0 5 L 5 0" stroke="' + fill + '"/>');
- mxOutline.prototype.sizerImage = null;
-
- mxConstants.VERTEX_SELECTION_COLOR = '#C0C0C0';
- mxConstants.EDGE_SELECTION_COLOR = '#C0C0C0';
- mxConstants.CONNECT_HANDLE_FILLCOLOR = '#cee7ff';
- mxConstants.DEFAULT_VALID_COLOR = fill;
- mxConstants.GUIDE_COLOR = '#C0C0C0';
- mxConstants.OUTLINE_COLOR = '#29b6f2';
- mxConstants.OUTLINE_HANDLE_FILLCOLOR = '#29b6f2';
- mxConstants.OUTLINE_HANDLE_STROKECOLOR = '#fff';
- Graph.prototype.svgShadowColor = '#3D4574';
- Graph.prototype.svgShadowOpacity = '0.4';
- Graph.prototype.svgShadowSize = '0.6';
- Graph.prototype.svgShadowBlur = '1.2';
- Format.inactiveTabBackgroundColor = '#e4e4e4';
- mxGraphHandler.prototype.previewColor = '#C0C0C0';
- mxRubberband.prototype.defaultOpacity = 50;
- HoverIcons.prototype.inactiveOpacity = 25;
- Format.prototype.showCloseButton = false;
- EditorUi.prototype.closableScratchpad = false;
- EditorUi.prototype.toolbarHeight = 46;
- EditorUi.prototype.footerHeight = 0;
- Graph.prototype.editAfterInsert = !mxClient.IS_IOS && !mxClient.IS_ANDROID;
-
- /**
- * Creates inline CSS element.
- */
- Editor.styleElt = document.createElement('style')
- Editor.styleElt.type = 'text/css';
- Editor.styleElt.innerHTML = Editor.createMinimalCss();
- document.getElementsByTagName('head')[0].appendChild(Editor.styleElt);
- /**
- * Sets the XML node for the current diagram.
- */
- Editor.prototype.isChromelessView = function()
- {
- return false;
- };
- /**
- * Sets the XML node for the current diagram.
- */
- Graph.prototype.isLightboxView = function()
- {
- return false;
- };
-
- var editorUiRefresh = EditorUi.prototype.refresh;
- /**
- * Changes refresh to only update the diagram container in sketch mode.
- */
- EditorUi.prototype.refresh = function(sizeDidChange)
- {
- editorUiRefresh.apply(this, arguments);
- if (this.tabContainer != null)
- {
- // Makes room for view zoom menu
- this.tabContainer.style.right = '62px';
- this.diagramContainer.style.bottom = this.tabContainerHeight + 'px';
- }
- };
- // Overridden to update save menu state
- /**
- * Updates action states depending on the selection.
- */
- var editorUiUpdateActionStates = EditorUi.prototype.updateActionStates;
-
- EditorUi.prototype.updateActionStates = function()
- {
- editorUiUpdateActionStates.apply(this, arguments);
- this.menus.get('save').setEnabled(this.getCurrentFile() != null || urlParams['embed'] == '1');
- };
- // Hides keyboard shortcuts in menus
- var menusAddShortcut = Menus.prototype.addShortcut;
-
- Menus.prototype.addShortcut = function(item, action)
- {
- if (action.shortcut != null && iw < 900 && !mxClient.IS_IOS)
- {
- var td = item.firstChild.nextSibling;
- td.setAttribute('title', action.shortcut);
- }
- else
- {
- menusAddShortcut.apply(this, arguments);
- }
- };
-
- // Overridden to toggle window instead
- EditorUi.prototype.toggleFormatPanel = function(visible)
- {
- if (this.formatWindow != null)
- {
- this.formatWindow.window.setVisible((visible != null) ?
- visible : !this.formatWindow.window.isVisible());
- }
- else
- {
- toggleFormat(this);
- }
- };
-
- EditorUi.prototype.isFormatPanelVisible = function()
- {
- return (this.formatWindow != null && this.formatWindow.window.isVisible()) ||
- (this.formatWindow == null && this.formatWidth > 0);
- };
- DiagramFormatPanel.prototype.isMathOptionVisible = function()
- {
- return true;
- };
-
- // Initializes the user interface
- var editorUiDestroy = EditorUi.prototype.destroy;
- EditorUi.prototype.destroy = function()
- {
- this.destroyWindows();
- editorUiDestroy.apply(this, arguments);
- };
-
- // Hides windows when a file is closed
- var editorUiSetGraphEnabled = EditorUi.prototype.setGraphEnabled;
-
- EditorUi.prototype.setGraphEnabled = function(enabled)
- {
- editorUiSetGraphEnabled.apply(this, arguments);
-
- if (!enabled)
- {
- if (this.sidebarWindow != null)
- {
- this.sidebarWindow.window.setVisible(false);
- }
- if (this.formatWindow != null)
- {
- this.formatWindow.window.setVisible(false);
- }
- }
- else
- {
- var iw = window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth;
- if (iw >= 1000 && this.sidebarWindow != null)
- {
- this.sidebarWindow.window.setVisible(true);
- }
-
- if (this.formatWindow != null && iw >= 1000)
- {
- this.formatWindow.window.setVisible(true);
- }
- }
- };
-
- // Disables centering of graph after iframe resize
- EditorUi.prototype.chromelessWindowResize = function() {};
-
- // Adds actions and menus
- var menusInit = Menus.prototype.init;
- Menus.prototype.init = function()
- {
- menusInit.apply(this, arguments);
-
- var ui = this.editorUi;
-
- if (EditorUi.enablePlantUml && !ui.isOffline())
- {
- ui.actions.put('plantUml', new Action(mxResources.get('plantUml') + '...', function()
- {
- var dlg = new ParseDialog(ui, mxResources.get('plantUml') + '...', 'plantUml');
- ui.showDialog(dlg.container, 620, 420, true, false);
- dlg.init();
- }));
- }
-
- ui.actions.put('mermaid', new Action(mxResources.get('mermaid') + '...', function()
- {
- var dlg = new ParseDialog(ui, mxResources.get('mermaid') + '...', 'mermaid');
- ui.showDialog(dlg.container, 620, 420, true, false);
- dlg.init();
- }));
- var methods = ['horizontalFlow', 'verticalFlow', '-', 'horizontalTree', 'verticalTree',
- 'radialTree', '-', 'organic', 'circle'];
- var addInsertItem = function(menu, parent, title, method)
- {
- menu.addItem(title, null, mxUtils.bind(this, function()
- {
- var dlg = new CreateGraphDialog(ui, title, method);
- ui.showDialog(dlg.container, 620, 420, true, false);
- // Executed after dialog is added to dom
- dlg.init();
- }), parent);
- };
- this.put('insertLayout', new Menu(mxUtils.bind(this, function(menu, parent)
- {
- for (var i = 0; i < methods.length; i++)
- {
- if (methods[i] == '-')
- {
- menu.addSeparator(parent);
- }
- else
- {
- addInsertItem(menu, parent, mxResources.get(methods[i]) + '...', methods[i]);
- }
- }
- })));
- };
-
- // Installs the format toolbar
- EditorUi.prototype.installFormatToolbar = function(container)
- {
- var graph = this.editor.graph;
- var div = document.createElement('div');
-
- div.style.cssText = 'position:absolute;top:10px;z-index:1;border-radius:4px;' +
- 'box-shadow:0px 0px 3px 1px #d1d1d1;padding:6px;white-space:nowrap;background-color:#fff;' +
- 'transform:translate(-50%, 0);left:50%;';
-
- graph.getSelectionModel().addListener(mxEvent.CHANGE, mxUtils.bind(this, function(sender, evt)
- {
- if (graph.getSelectionCount() > 0)
- {
- container.appendChild(div);
- div.innerHTML = 'Selected: ' + graph.getSelectionCount();
- }
- else if (div.parentNode != null)
- {
- div.parentNode.removeChild(div);
- }
- }));
- };
- var formatWindowInitialized = false;
- EditorUi.prototype.initFormatWindow = function()
- {
- if (!formatWindowInitialized && this.formatWindow != null)
- {
- formatWindowInitialized = true;
- var toggleMinimized = this.formatWindow.window.toggleMinimized;
- var w = 240;
-
- this.formatWindow.window.toggleMinimized = function()
- {
- toggleMinimized.apply(this, arguments);
-
- if (this.minimized)
- {
- w = parseInt(this.div.style.width);
- this.div.style.width = '140px';
- this.table.style.width = '140px';
- this.div.style.left = (parseInt(this.div.style.left) + w - 140) + 'px';
- }
- else
- {
- this.div.style.width = w + 'px';
- this.table.style.width = this.div.style.width;
- this.div.style.left = (Math.max(0, parseInt(this.div.style.left) - w + 140)) + 'px';
- }
-
- this.fit();
- };
-
- mxEvent.addListener(this.formatWindow.window.title, 'dblclick', mxUtils.bind(this, function(evt)
- {
- if (mxEvent.getSource(evt) == this.formatWindow.window.title)
- {
- this.formatWindow.window.toggleMinimized();
- }
- }));
- }
- };
-
- // Initializes the user interface
- var editorUiInit = EditorUi.prototype.init;
- EditorUi.prototype.init = function()
- {
- editorUiInit.apply(this, arguments);
-
- var libs = Editor.enableCustomLibraries && (urlParams['embed'] != '1' ||
- urlParams['libraries'] == '1');
- var div = document.createElement('div');
- div.style.cssText = 'position:absolute;left:0px;right:0px;top:0px;overflow-y:auto;overflow-x:hidden;';
- div.style.bottom = (libs) ? '32px' : '0px';
- this.sidebar = this.createSidebar(div);
-
- if (iw >= 1000 || urlParams['clibs'] != null || urlParams['libs'] != null ||
- urlParams['search-shapes'] != null)
- {
- toggleShapes(this, true);
-
- if (this.sidebar != null && urlParams['search-shapes'] != null && this.sidebar.searchShapes != null)
- {
- this.sidebar.searchShapes(urlParams['search-shapes']);
- this.sidebar.showEntries('search');
- }
- }
-
- if (EditorUi.windowed && iw >= 1000)
- {
- toggleFormat(this, true);
- this.formatWindow.window.setVisible(true);
- }
-
- // Needed for creating elements in Format panel
- var ui = this;
- var graph = ui.editor.graph;
- ui.toolbar = this.createToolbar(ui.createDiv('geToolbar'));
- ui.defaultLibraryName = mxResources.get('untitledLibrary');
- var menubar = document.createElement('div');
- menubar.className = 'geMenubarContainer';
- var before = null;
- var menuObj = new Menubar(ui, menubar);
- function addMenu(id, small, img)
- {
- var menu = ui.menus.get(id);
-
- var elt = menuObj.addMenu(mxResources.get(id), mxUtils.bind(this, function()
- {
- // Allows extensions of menu.functid
- if (!elt.classList.contains('mxDisabled'))
- {
- menu.funct.apply(this, arguments);
- }
- }), before);
-
- elt.className = 'geMenuItem';
- elt.style.display = 'inline-block';
- elt.style.boxSizing = 'border-box';
- elt.style.top = '6px';
- elt.style.marginRight = '6px';
- elt.style.height = '30px';
- elt.style.paddingTop = '6px';
- elt.style.paddingBottom = '6px';
- elt.style.cursor = 'pointer';
- elt.setAttribute('title', mxResources.get(id));
- ui.menus.menuCreated(menu, elt, 'geMenuItem');
-
- if (img != null)
- {
- elt.style.backgroundImage = 'url(' + img + ')';
- elt.style.backgroundPosition = 'center center';
- elt.style.backgroundRepeat = 'no-repeat';
- elt.style.backgroundSize = '24px 24px';
- elt.style.width = '34px';
- elt.innerText = '';
- }
- else if (!small)
- {
- elt.style.backgroundImage = 'url(' + mxWindow.prototype.normalizeImage + ')';
- elt.style.backgroundPosition = 'right 6px center';
- elt.style.backgroundRepeat = 'no-repeat';
- elt.style.paddingRight = '22px';
- }
- return elt;
- };
-
- function addMenuItem(label, fn, small, tooltip, action, img)
- {
- var btn = document.createElement('a');
- btn.className = 'geMenuItem';
- btn.style.display = 'inline-block';
- btn.style.boxSizing = 'border-box';
- btn.style.height = '30px';
- btn.style.padding = '6px';
- btn.style.position = 'relative';
- btn.style.verticalAlign = 'top';
- btn.style.top = '0px';
-
- if (ui.statusContainer != null)
- {
- menubar.insertBefore(btn, ui.statusContainer);
- }
- else
- {
- menubar.appendChild(btn);
- }
-
- if (img != null)
- {
- btn.style.backgroundImage = 'url(' + img + ')';
- btn.style.backgroundPosition = 'center center';
- btn.style.backgroundRepeat = 'no-repeat';
- btn.style.backgroundSize = '24px 24px';
- btn.style.width = '34px';
- }
- else
- {
- mxUtils.write(btn, label);
- }
-
- // Prevents focus
- mxEvent.addListener(btn, (mxClient.IS_POINTER) ? 'pointerdown' : 'mousedown',
- mxUtils.bind(this, function(evt)
- {
- evt.preventDefault();
- }));
- mxEvent.addListener(btn, 'click', function(evt)
- {
- if (btn.getAttribute('disabled') != 'disabled')
- {
- fn(evt);
- }
-
- mxEvent.consume(evt);
- });
-
- if (small == null)
- {
- btn.style.marginRight = '4px';
- }
-
- if (tooltip != null)
- {
- btn.setAttribute('title', tooltip);
- }
- if (action != null)
- {
- function updateState()
- {
- if (action.isEnabled())
- {
- btn.removeAttribute('disabled');
- btn.style.cursor = 'pointer';
- }
- else
- {
- btn.setAttribute('disabled', 'disabled');
- btn.style.cursor = 'default';
- }
- };
-
- action.addListener('stateChanged', updateState);
- graph.addListener('enabledChanged', updateState);
- updateState();
- }
-
- return btn;
- };
-
- function createGroup(btns, op, container)
- {
- var btnGroup = document.createElement('div');
- btnGroup.className = 'geMenuItem';
- btnGroup.style.display = 'inline-block';
- btnGroup.style.verticalAlign = 'top';
- btnGroup.style.marginRight = '6px';
- btnGroup.style.padding = '0 4px 0 4px';
- btnGroup.style.height = '30px';
- btnGroup.style.position = 'relative';
- btnGroup.style.top = '0px';
- for (var i = 0; i < btns.length; i++)
- {
- if (btns[i] != null)
- {
- btns[i].style.margin = '0px';
- btns[i].style.boxShadow = 'none';
- btnGroup.appendChild(btns[i]);
- }
- }
-
- if (op != null)
- {
- mxUtils.setOpacity(btnGroup, op);
- }
- if (ui.statusContainer != null)
- {
- menubar.insertBefore(btnGroup, ui.statusContainer);
- }
- else
- {
- menubar.appendChild(btnGroup);
- }
-
- return btnGroup;
- };
- ui.statusContainer = ui.createStatusContainer();
- ui.statusContainer.style.position = 'relative';
- ui.statusContainer.style.maxWidth = '';
- ui.statusContainer.style.color = 'gray';
- ui.statusContainer.style.cursor = 'default';
-
- function updateTitle()
- {
- var file = ui.getCurrentFile();
-
- if (file != null && file.getTitle() != null)
- {
- var mode = file.getMode();
-
- if (mode == 'google')
- {
- mode = 'googleDrive';
- }
- else if (mode == 'github')
- {
- mode = 'gitHub';
- }
- else if (mode == 'gitlab')
- {
- mode = 'gitLab';
- }
- else if (mode == 'onedrive')
- {
- mode = 'oneDrive';
- }
-
- mode = mxResources.get(mode);
- menubar.setAttribute('title', file.getTitle() + ((mode != null) ? ' (' + mode + ')' : ''));
- }
- else
- {
- menubar.removeAttribute('title');
- }
- };
-
- // Hides popup menus
- var uiHideCurrentMenu = ui.hideCurrentMenu;
-
- ui.hideCurrentMenu = function()
- {
- uiHideCurrentMenu.apply(this, arguments);
- this.editor.graph.popupMenuHandler.hideMenu();
- };
- // Connects the status bar to the editor status
- var uiDescriptorChanged = ui.descriptorChanged;
-
- ui.descriptorChanged = function()
- {
- uiDescriptorChanged.apply(this, arguments);
- updateTitle();
- };
-
- ui.setStatusText(ui.editor.getStatus());
- menubar.appendChild(ui.statusContainer);
- ui.buttonContainer = document.createElement('div');
- ui.buttonContainer.style.cssText = 'display:flex;justify-content:flex-end;padding-right:10px;gap:6px;' +
- 'white-space:nowrap;background-color:inherit;align-items:center;min-width:0;margin-left:auto;';
- menubar.appendChild(ui.buttonContainer);
-
- // Container for the user element
- ui.menubarContainer = ui.buttonContainer;
- ui.tabContainer = document.createElement('div');
- ui.tabContainer.className = 'geTabContainer geTabItem';
- ui.tabContainer.style.cssText = 'position:absolute;left:0px;right:0px;bottom:0px;height:30px;' +
- 'white-space:nowrap;visibility:hidden;';
- var previousParent = ui.diagramContainer.parentNode;
- var wrapper = document.createElement('div');
- wrapper.style.cssText = 'position:absolute;top:0px;left:0px;right:0px;bottom:0px;overflow:hidden;';
- ui.diagramContainer.style.top = '47px';
- var insertImage = Editor.addBoxImage;
-
- // Hides hover icons if freehand is active
- if (ui.hoverIcons != null)
- {
- var hoverIconsUpdate = ui.hoverIcons.update;
-
- ui.hoverIcons.update = function()
- {
- if (!graph.freehand.isDrawing())
- {
- hoverIconsUpdate.apply(this, arguments);
- }
- };
- }
-
- // Removes sketch style from freehand shapes
- if (graph.freehand != null)
- {
- var freehandCreateStyle = graph.freehand.createStyle;
-
- graph.freehand.createStyle = function(stencil)
- {
- return freehandCreateStyle.apply(this, arguments) + 'sketch=0;';
- };
- }
-
- // Connects the status bar to the editor status
- ui.editor.addListener('statusChanged', mxUtils.bind(this, function()
- {
- ui.setStatusText(ui.editor.getStatus());
- }));
-
- ui.setStatusText(ui.editor.getStatus());
- var viewZoomMenu = ui.menus.get('viewZoom');
- if (viewZoomMenu != null)
- {
- var fitFunction = function(evt)
- {
- if (mxEvent.isAltDown(evt))
- {
- ui.hideCurrentMenu();
- ui.actions.get('customZoom').funct();
- mxEvent.consume(evt);
- }
- // geItem is a dropdown menu, geMenuItem is a button in the toolbar
- else if (mxEvent.getSource(evt).className == 'geMenuItem' || mxEvent.isShiftDown(evt))
- {
- ui.hideCurrentMenu();
- ui.actions.get('smartFit').funct();
- mxEvent.consume(evt);
- }
- };
- var zoomInAction = ui.actions.get('zoomIn');
- var zoomOutAction = ui.actions.get('zoomOut');
- var resetViewAction = ui.actions.get('resetView');
- var undoAction = ui.actions.get('undo');
- var redoAction = ui.actions.get('redo');
- var undoElt = addMenuItem('', undoAction.funct, null, mxResources.get('undo') + ' (' + undoAction.shortcut + ')', undoAction, Editor.undoImage);
- var redoElt = addMenuItem('', redoAction.funct, null, mxResources.get('redo') + ' (' + redoAction.shortcut + ')', redoAction, Editor.redoImage);
- var fitElt = addMenuItem('', fitFunction, true, mxResources.get('fit') + ' (' + Editor.ctrlKey + '+H)', resetViewAction, Editor.zoomFitImage);
-
- menubar.style.cssText = 'position:absolute;left:0px;right:0px;top:0px;height:30px;padding:8px;' +
- 'text-align:left;white-space:nowrap;';
- this.tabContainer.style.right = '70px';
- var elt = menuObj.addMenu('100%', viewZoomMenu.funct);
- elt.setAttribute('title', mxResources.get('zoom') + ' (Alt+Mousewheel)');
- elt.className = 'geTabItem';
- elt.style.height = ui.tabContainerHeight + 'px';
- elt.style.position = 'absolute';
- elt.style.display = (urlParams['pages'] != '0') ? 'flex' : 'none';
- elt.style.alignItems = 'center';
- elt.style.justifyContent = 'center';
- elt.style.paddingRight = '11px';
- elt.style.whiteSpace = 'nowrap';
- elt.style.overflow = 'hidden';
- elt.style.fontSize = '11px';
- elt.style.width = '51px';
- elt.style.right = '0px';
- elt.style.bottom = '0px';
- elt.style.boxSizing = 'content-box';
- elt.style.backgroundImage = 'url(' + mxWindow.prototype.minimizeImage + ')';
- elt.style.backgroundPosition = 'right 6px top 15px';
- elt.style.backgroundRepeat = 'no-repeat';
- elt.style.backgroundSize = '10px';
- elt.style.zIndex = '1';
- wrapper.appendChild(elt);
- // Updates the label if the scale changes
- (function(elt)
- {
- // Adds shift+/alt+click on zoom label
- mxEvent.addListener(elt, 'click', fitFunction);
- var updateZoom = mxUtils.bind(this, function(sender, evt, f)
- {
- f = (f != null) ? f : 1;
- elt.innerText = '';
- mxUtils.write(elt, Math.round(ui.editor.graph.view.scale * 100 * f) + '%');
- });
- ui.editor.graph.view.addListener(mxEvent.EVENT_SCALE, updateZoom);
- ui.editor.addListener('resetGraphView', updateZoom);
- ui.editor.addListener('pageSelected', updateZoom);
- // Zoom Preview
- ui.editor.graph.addListener('zoomPreview', mxUtils.bind(this, function(sender, evt)
- {
- updateZoom(sender, evt, evt.getProperty('factor'));
- }));
- })(elt);
-
- // Augments setGraphEnabled to update visible state
- var uiSetGraphEnabled = ui.setGraphEnabled;
-
- ui.setGraphEnabled = function()
- {
- uiSetGraphEnabled.apply(this, arguments);
-
- if (this.tabContainer != null)
- {
- elt.style.visibility = this.tabContainer.style.visibility;
- this.diagramContainer.style.bottom = (urlParams['pages'] != '0' &&
- this.tabContainer.style.visibility != 'hidden') ?
- this.tabContainerHeight + 'px' : '0px';
- }
- };
- }
-
- wrapper.appendChild(menubar);
- wrapper.appendChild(ui.diagramContainer);
- previousParent.appendChild(wrapper);
- ui.updateTabContainer();
- if (!EditorUi.windowed && iw >= 1000)
- {
- toggleFormat(this, true);
- }
-
- wrapper.appendChild(ui.tabContainer);
-
- function refreshMenu()
- {
- // Removes all existing menu items
- var node = menubar.firstChild;
-
- while (node != null)
- {
- var temp = node.nextSibling;
-
- if (node.className == 'geMenuItem' || node.className == 'geItem')
- {
- node.parentNode.removeChild(node);
- }
-
- node = temp;
- }
-
- before = menubar.firstChild;
- iw = window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth;
- var small = iw < 1000;
- var appElt = null;
-
- if (!small)
- {
- appElt = addMenu('diagram');
- }
- var temp = (small) ? addMenu('diagram', null, Editor.menuImage) : null;
- if (temp != null)
- {
- appElt = temp;
- }
- createGroup([appElt, addMenuItem(mxResources.get('shapes'), ui.actions.get('toggleShapes').funct, null,
- mxResources.get('shapes'), ui.actions.get('image'), (small) ? Editor.shapesImage : null),
- addMenuItem(mxResources.get('format'), ui.actions.get('format').funct, null,
- mxResources.get('format') + ' (' + ui.actions.get('format').shortcut + ')', ui.actions.get('image'),
- (small) ? Editor.formatImage : null)],
- (small) ? 60 : null);
-
- var elt = addMenu('insert', true, (small) ? insertImage : null);
- createGroup([elt, addMenuItem(mxResources.get('delete'), ui.actions.get('delete').funct,
- null, mxResources.get('delete'), ui.actions.get('delete'),
- (small) ? Editor.trashImage : null)], (small) ? 60 : null);
- if (!graph.isEnabled())
- {
- elt.classList.add('mxDisabled');
- }
- if (iw >= 411)
- {
- createGroup([undoElt, redoElt], 60);
-
- if (iw >= 520)
- {
- createGroup([fitElt,
- (iw >= 640) ? addMenuItem('', zoomInAction.funct, true, mxResources.get('zoomIn') + ' (' + Editor.ctrlKey + ' +)',
- zoomInAction, Editor.zoomInImage) : null,
- (iw >= 640) ? addMenuItem('', zoomOutAction.funct, true, mxResources.get('zoomOut') + ' (' + Editor.ctrlKey + ' -)',
- zoomOutAction, Editor.zoomOutImage) : null], 60);
- }
- }
- };
-
- refreshMenu();
- ui.addListener('lockedChanged', refreshMenu);
-
- mxEvent.addListener(window, 'resize', function()
- {
- refreshMenu();
-
- if (ui.sidebarWindow != null)
- {
- ui.sidebarWindow.window.fit();
- }
-
- if (ui.formatWindow != null)
- {
- ui.formatWindow.window.fit();
- }
- if (ui.actions.outlineWindow != null)
- {
- ui.actions.outlineWindow.window.fit();
- }
- if (ui.actions.layersWindow != null)
- {
- ui.actions.layersWindow.window.fit();
- }
- if (ui.menus.chatWindow != null)
- {
- ui.menus.chatWindow.window.fit();
- }
- if (ui.menus.tagsWindow != null)
- {
- ui.menus.tagsWindow.window.fit();
- }
- if (ui.menus.findWindow != null)
- {
- ui.menus.findWindow.window.fit();
- }
- if (ui.menus.findReplaceWindow != null)
- {
- ui.menus.findReplaceWindow.window.fit();
- }
- });
- };
- };
- (function()
- {
- var initialized = false;
-
- // ChromeApp has async local storage
- if (uiTheme == 'min' && !initialized && !mxClient.IS_CHROMEAPP)
- {
- EditorUi.initMinimalTheme();
- initialized = true;
- }
-
- var uiInitTheme = EditorUi.initTheme;
-
- // For async startup like chromeos
- EditorUi.initTheme = function()
- {
- uiInitTheme.apply(this, arguments);
-
- if (uiTheme == 'min' && !initialized)
- {
- this.initMinimalTheme();
- initialized = true;
- }
- };
- })();
|