lib/glimmer/swt/menu_proxy.rb in glimmer-dsl-opal-0.16.2 vs lib/glimmer/swt/menu_proxy.rb in glimmer-dsl-opal-0.17.0

- old
+ new

@@ -216,27 +216,43 @@ minimum_width = children.to_a.map(&:dom_element).map(&:width).reduce(:+) the_element.css('min-width', minimum_width) end end + def visible=(value) + @visible = value + if @visible + parent.menu_requested = true + parent.dom_element.css('position', 'relative') + render + dom_element.css('position', 'absolute') + dom_element.css('left', parent.menu_x - parent.dom_element.offset.left) + dom_element.css('top', parent.menu_y - parent.dom_element.offset.top) + parent.menu_requested = false + else + close + end + end + def render(custom_parent_dom_element: nil, brand_new: false) # TODO attach to top nav bar if parent is shell # TODO attach listener to parent to display on right click if parent.is_a?(MenuProxy) || parent.is_a?(MenuItemProxy) || parent.menu_requested? || parent.is_a?(ShellProxy) super(custom_parent_dom_element: custom_parent_dom_element, brand_new: brand_new) if root_menu? && !bar? `$(#{path}).menu();` @close_event_handler = lambda do |event| - close if event.target.parents('.ui-menu').empty? + close if event.target != parent.dom_element && event.target.parents('.ui-menu').empty? end Element['body'].on('click', &@close_event_handler) end end end def close dom_element.remove Element['body'].off('click', &@close_event_handler) + @visible = false end def root_menu? !parent.is_a?(MenuProxy) && !parent.is_a?(MenuItemProxy) end