diff --git a/addons/rose/addon/components/rose/dropdown.js b/addons/rose/addon/components/rose/dropdown.js index 07e9ba14b..4e6ffea81 100644 --- a/addons/rose/addon/components/rose/dropdown.js +++ b/addons/rose/addon/components/rose/dropdown.js @@ -12,13 +12,15 @@ export default Component.extend({ /** * Closes the details element by setting its `open` attribute to `false`. - * While the details element handles open/close functionality without - * JavaScript, we include this helper action to ensure that when the user - * clicks _outside_ of the element, it still closes. + * While the details element handles open/close functionality when clicking + * directly on the summar elemenet without JavaScript, we include this helper + * action to ensure that when the user clicks _outside_ of the element, + * or _inside_ the content, it still closes. * @param {HTMLElement} element */ @action close(element) { if (element.open) element.open = false; + if (element.parentElement.open) element.parentElement.open = false; }, }); diff --git a/addons/rose/addon/modifiers/on-click-inside.js b/addons/rose/addon/modifiers/on-click-inside.js new file mode 100644 index 000000000..ec64ff5f7 --- /dev/null +++ b/addons/rose/addon/modifiers/on-click-inside.js @@ -0,0 +1,20 @@ +import { modifier } from 'ember-modifier'; + +/** + * Used to detect clicks occuring _inside_ the modified element. + * This is useful especially for dropdowns to toggle content visibility + * when the user clicks an item. + */ +export default modifier((element, [callback]) => { + function handleClick(event) { + if (element.contains(event.target)) { + callback(element, event); + } + } + + element.addEventListener('click', handleClick, false); + + return () => { + element.removeEventListener('click', handleClick, false); + }; +}); diff --git a/addons/rose/addon/templates/components/rose/dropdown.hbs b/addons/rose/addon/templates/components/rose/dropdown.hbs index 51b429435..c65c640ba 100644 --- a/addons/rose/addon/templates/components/rose/dropdown.hbs +++ b/addons/rose/addon/templates/components/rose/dropdown.hbs @@ -22,7 +22,7 @@ -