diff options
author | adhitya | 2016-04-12 07:02:39 +0000 |
---|---|---|
committer | adhitya | 2016-04-12 07:02:39 +0000 |
commit | dd83478e3fcaac98de690aa59e6288ad41a1c351 (patch) | |
tree | 38653bdf0ae95053f66777c4ac3fe5be5d8fbd33 /src/js/util/mxPopupMenu.js | |
parent | 92f3207b50a1caca07df5c5b238212af3358905b (diff) | |
download | xcos-on-web-dd83478e3fcaac98de690aa59e6288ad41a1c351.tar.gz xcos-on-web-dd83478e3fcaac98de690aa59e6288ad41a1c351.tar.bz2 xcos-on-web-dd83478e3fcaac98de690aa59e6288ad41a1c351.zip |
Keyboard shortcuts work properly
Diffstat (limited to 'src/js/util/mxPopupMenu.js')
-rw-r--r-- | src/js/util/mxPopupMenu.js | 574 |
1 files changed, 0 insertions, 574 deletions
diff --git a/src/js/util/mxPopupMenu.js b/src/js/util/mxPopupMenu.js deleted file mode 100644 index b188cb6..0000000 --- a/src/js/util/mxPopupMenu.js +++ /dev/null @@ -1,574 +0,0 @@ -/** - * $Id: mxPopupMenu.js,v 1.37 2012-04-22 10:16:23 gaudenz Exp $ - * Copyright (c) 2006-2010, JGraph Ltd - */ -/** - * Class: mxPopupMenu - * - * Event handler that pans and creates popupmenus. To use the left - * mousebutton for panning without interfering with cell moving and - * resizing, use <isUseLeftButton> and <isIgnoreCell>. For grid size - * steps while panning, use <useGrid>. This handler is built-into - * <mxGraph.panningHandler> and enabled using <mxGraph.setPanning>. - * - * Constructor: mxPopupMenu - * - * Constructs an event handler that creates a popupmenu. The - * event handler is not installed anywhere in this ctor. - * - * Event: mxEvent.SHOW - * - * Fires after the menu has been shown in <popup>. - */ -function mxPopupMenu(factoryMethod) -{ - this.factoryMethod = factoryMethod; - - if (factoryMethod != null) - { - this.init(); - } -}; - -/** - * Extends mxEventSource. - */ -mxPopupMenu.prototype = new mxEventSource(); -mxPopupMenu.prototype.constructor = mxPopupMenu; - -/** - * Variable: submenuImage - * - * URL of the image to be used for the submenu icon. - */ -mxPopupMenu.prototype.submenuImage = mxClient.imageBasePath + '/submenu.gif'; - -/** - * Variable: zIndex - * - * Specifies the zIndex for the popupmenu and its shadow. Default is 1006. - */ -mxPopupMenu.prototype.zIndex = 10006; - -/** - * Variable: factoryMethod - * - * Function that is used to create the popup menu. The function takes the - * current panning handler, the <mxCell> under the mouse and the mouse - * event that triggered the call as arguments. - */ -mxPopupMenu.prototype.factoryMethod = null; - -/** - * Variable: useLeftButtonForPopup - * - * Specifies if popupmenus should be activated by clicking the left mouse - * button. Default is false. - */ -mxPopupMenu.prototype.useLeftButtonForPopup = false; - -/** - * Variable: enabled - * - * Specifies if events are handled. Default is true. - */ -mxPopupMenu.prototype.enabled = true; - -/** - * Variable: itemCount - * - * Contains the number of times <addItem> has been called for a new menu. - */ -mxPopupMenu.prototype.itemCount = 0; - -/** - * Variable: autoExpand - * - * Specifies if submenus should be expanded on mouseover. Default is false. - */ -mxPopupMenu.prototype.autoExpand = false; - -/** - * Variable: smartSeparators - * - * Specifies if separators should only be added if a menu item follows them. - * Default is false. - */ -mxPopupMenu.prototype.smartSeparators = false; - -/** - * Variable: labels - * - * Specifies if any labels should be visible. Default is true. - */ -mxPopupMenu.prototype.labels = true; - -/** - * Function: init - * - * Initializes the shapes required for this vertex handler. - */ -mxPopupMenu.prototype.init = function() -{ - // Adds the inner table - this.table = document.createElement('table'); - this.table.className = 'mxPopupMenu'; - - this.tbody = document.createElement('tbody'); - this.table.appendChild(this.tbody); - - // Adds the outer div - this.div = document.createElement('div'); - this.div.className = 'mxPopupMenu'; - this.div.style.display = 'inline'; - this.div.style.zIndex = this.zIndex; - this.div.appendChild(this.table); - - // Disables the context menu on the outer div - mxEvent.disableContextMenu(this.div); -}; - -/** - * Function: isEnabled - * - * Returns true if events are handled. This implementation - * returns <enabled>. - */ -mxPopupMenu.prototype.isEnabled = function() -{ - return this.enabled; -}; - -/** - * Function: setEnabled - * - * Enables or disables event handling. This implementation - * updates <enabled>. - */ -mxPopupMenu.prototype.setEnabled = function(enabled) -{ - this.enabled = enabled; -}; - -/** - * Function: isPopupTrigger - * - * Returns true if the given event is a popupmenu trigger for the optional - * given cell. - * - * Parameters: - * - * me - <mxMouseEvent> that represents the mouse event. - */ -mxPopupMenu.prototype.isPopupTrigger = function(me) -{ - return me.isPopupTrigger() || (this.useLeftButtonForPopup && - mxEvent.isLeftMouseButton(me.getEvent())); -}; - -/** - * Function: addItem - * - * Adds the given item to the given parent item. If no parent item is specified - * then the item is added to the top-level menu. The return value may be used - * as the parent argument, ie. as a submenu item. The return value is the table - * row that represents the item. - * - * Paramters: - * - * title - String that represents the title of the menu item. - * image - Optional URL for the image icon. - * funct - Function associated that takes a mouseup or touchend event. - * parent - Optional item returned by <addItem>. - * iconCls - Optional string that represents the CSS class for the image icon. - * IconsCls is ignored if image is given. - * enabled - Optional boolean indicating if the item is enabled. Default is true. - */ -mxPopupMenu.prototype.addItem = function(title, image, funct, parent, iconCls, enabled) -{ - parent = parent || this; - this.itemCount++; - - // Smart separators only added if element contains items - if (parent.willAddSeparator) - { - if (parent.containsItems) - { - this.addSeparator(parent, true); - } - - parent.willAddSeparator = false; - } - - parent.containsItems = true; - var tr = document.createElement('tr'); - tr.className = 'mxPopupMenuItem'; - var col1 = document.createElement('td'); - col1.className = 'mxPopupMenuIcon'; - - // Adds the given image into the first column - if (image != null) - { - var img = document.createElement('img'); - img.src = image; - col1.appendChild(img); - } - else if (iconCls != null) - { - var div = document.createElement('div'); - div.className = iconCls; - col1.appendChild(div); - } - - tr.appendChild(col1); - - if (this.labels) - { - var col2 = document.createElement('td'); - col2.className = 'mxPopupMenuItem' + - ((enabled != null && !enabled) ? ' disabled' : ''); - mxUtils.write(col2, title); - col2.align = 'left'; - tr.appendChild(col2); - - var col3 = document.createElement('td'); - col3.className = 'mxPopupMenuItem' + - ((enabled != null && !enabled) ? ' disabled' : ''); - col3.style.paddingRight = '6px'; - col3.style.textAlign = 'right'; - - tr.appendChild(col3); - - if (parent.div == null) - { - this.createSubmenu(parent); - } - } - - parent.tbody.appendChild(tr); - - if (enabled == null || enabled) - { - var md = (mxClient.IS_TOUCH) ? 'touchstart' : 'mousedown'; - var mm = (mxClient.IS_TOUCH) ? 'touchmove' : 'mousemove'; - var mu = (mxClient.IS_TOUCH) ? 'touchend' : 'mouseup'; - - // Consumes the event on mouse down - mxEvent.addListener(tr, md, mxUtils.bind(this, function(evt) - { - this.eventReceiver = tr; - - if (parent.activeRow != tr && parent.activeRow != parent) - { - if (parent.activeRow != null && - parent.activeRow.div.parentNode != null) - { - this.hideSubmenu(parent); - } - - if (tr.div != null) - { - this.showSubmenu(parent, tr); - parent.activeRow = tr; - } - } - - mxEvent.consume(evt); - })); - - mxEvent.addListener(tr, mm, mxUtils.bind(this, function(evt) - { - if (parent.activeRow != tr && parent.activeRow != parent) - { - if (parent.activeRow != null && - parent.activeRow.div.parentNode != null) - { - this.hideSubmenu(parent); - } - - if (this.autoExpand && tr.div != null) - { - this.showSubmenu(parent, tr); - parent.activeRow = tr; - } - } - - // Sets hover style because TR in IE doesn't have hover - tr.className = 'mxPopupMenuItemHover'; - })); - - mxEvent.addListener(tr, mu, mxUtils.bind(this, function(evt) - { - // EventReceiver avoids clicks on a submenu item - // which has just been shown in the mousedown - if (this.eventReceiver == tr) - { - if (parent.activeRow != tr) - { - this.hideMenu(); - } - - if (funct != null) - { - funct(evt); - } - } - - this.eventReceiver = null; - mxEvent.consume(evt); - })); - - // Resets hover style because TR in IE doesn't have hover - mxEvent.addListener(tr, 'mouseout', - mxUtils.bind(this, function(evt) - { - tr.className = 'mxPopupMenuItem'; - }) - ); - } - - return tr; -}; - -/** - * Function: createSubmenu - * - * Creates the nodes required to add submenu items inside the given parent - * item. This is called in <addItem> if a parent item is used for the first - * time. This adds various DOM nodes and a <submenuImage> to the parent. - * - * Parameters: - * - * parent - An item returned by <addItem>. - */ -mxPopupMenu.prototype.createSubmenu = function(parent) -{ - parent.table = document.createElement('table'); - parent.table.className = 'mxPopupMenu'; - - parent.tbody = document.createElement('tbody'); - parent.table.appendChild(parent.tbody); - - parent.div = document.createElement('div'); - parent.div.className = 'mxPopupMenu'; - - parent.div.style.position = 'absolute'; - parent.div.style.display = 'inline'; - parent.div.style.zIndex = this.zIndex; - - parent.div.appendChild(parent.table); - - var img = document.createElement('img'); - img.setAttribute('src', this.submenuImage); - - // Last column of the submenu item in the parent menu - td = parent.firstChild.nextSibling.nextSibling; - td.appendChild(img); -}; - -/** - * Function: showSubmenu - * - * Shows the submenu inside the given parent row. - */ -mxPopupMenu.prototype.showSubmenu = function(parent, row) -{ - if (row.div != null) - { - row.div.style.left = (parent.div.offsetLeft + - row.offsetLeft+row.offsetWidth - 1) + 'px'; - row.div.style.top = (parent.div.offsetTop+row.offsetTop) + 'px'; - document.body.appendChild(row.div); - - // Moves the submenu to the left side if there is no space - var left = parseInt(row.div.offsetLeft); - var width = parseInt(row.div.offsetWidth); - - var b = document.body; - var d = document.documentElement; - - var right = (b.scrollLeft || d.scrollLeft) + (b.clientWidth || d.clientWidth); - - if (left + width > right) - { - row.div.style.left = (parent.div.offsetLeft - width + - ((mxClient.IS_IE) ? 6 : -6)) + 'px'; - } - - mxUtils.fit(row.div); - } -}; - -/** - * Function: addSeparator - * - * Adds a horizontal separator in the given parent item or the top-level menu - * if no parent is specified. - * - * Parameters: - * - * parent - Optional item returned by <addItem>. - * force - Optional boolean to ignore <smartSeparators>. Default is false. - */ -mxPopupMenu.prototype.addSeparator = function(parent, force) -{ - parent = parent || this; - - if (this.smartSeparators && !force) - { - parent.willAddSeparator = true; - } - else if (parent.tbody != null) - { - parent.willAddSeparator = false; - var tr = document.createElement('tr'); - - var col1 = document.createElement('td'); - col1.className = 'mxPopupMenuIcon'; - col1.style.padding = '0 0 0 0px'; - - tr.appendChild(col1); - - var col2 = document.createElement('td'); - col2.style.padding = '0 0 0 0px'; - col2.setAttribute('colSpan', '2'); - - var hr = document.createElement('hr'); - hr.setAttribute('size', '1'); - col2.appendChild(hr); - - tr.appendChild(col2); - - parent.tbody.appendChild(tr); - } -}; - -/** - * Function: popup - * - * Shows the popup menu for the given event and cell. - * - * Example: - * - * (code) - * graph.panningHandler.popup = function(x, y, cell, evt) - * { - * mxUtils.alert('Hello, World!'); - * } - * (end) - */ -mxPopupMenu.prototype.popup = function(x, y, cell, evt) -{ - if (this.div != null && this.tbody != null && this.factoryMethod != null) - { - this.div.style.left = x + 'px'; - this.div.style.top = y + 'px'; - - // Removes all child nodes from the existing menu - while (this.tbody.firstChild != null) - { - mxEvent.release(this.tbody.firstChild); - this.tbody.removeChild(this.tbody.firstChild); - } - - this.itemCount = 0; - this.factoryMethod(this, cell, evt); - - if (this.itemCount > 0) - { - this.showMenu(); - this.fireEvent(new mxEventObject(mxEvent.SHOW)); - } - } -}; - -/** - * Function: isMenuShowing - * - * Returns true if the menu is showing. - */ -mxPopupMenu.prototype.isMenuShowing = function() -{ - return this.div != null && this.div.parentNode == document.body; -}; - -/** - * Function: showMenu - * - * Shows the menu. - */ -mxPopupMenu.prototype.showMenu = function() -{ - // Disables filter-based shadow in IE9 standards mode - if (document.documentMode >= 9) - { - this.div.style.filter = 'none'; - } - - // Fits the div inside the viewport - document.body.appendChild(this.div); - mxUtils.fit(this.div); -}; - -/** - * Function: hideMenu - * - * Removes the menu and all submenus. - */ -mxPopupMenu.prototype.hideMenu = function() -{ - if (this.div != null) - { - if (this.div.parentNode != null) - { - this.div.parentNode.removeChild(this.div); - } - - this.hideSubmenu(this); - this.containsItems = false; - } -}; - -/** - * Function: hideSubmenu - * - * Removes all submenus inside the given parent. - * - * Parameters: - * - * parent - An item returned by <addItem>. - */ -mxPopupMenu.prototype.hideSubmenu = function(parent) -{ - if (parent.activeRow != null) - { - this.hideSubmenu(parent.activeRow); - - if (parent.activeRow.div.parentNode != null) - { - parent.activeRow.div.parentNode.removeChild(parent.activeRow.div); - } - - parent.activeRow = null; - } -}; - -/** - * Function: destroy - * - * Destroys the handler and all its resources and DOM nodes. - */ -mxPopupMenu.prototype.destroy = function() -{ - if (this.div != null) - { - mxEvent.release(this.div); - - if (this.div.parentNode != null) - { - this.div.parentNode.removeChild(this.div); - } - - this.div = null; - } -}; |