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