closedropdownonblur.js 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. /**
  2. * @license Copyright (c) 2003-2018, CKSource - Frederico Knabben. All rights reserved.
  3. * For licensing, see LICENSE.md.
  4. */
  5. /* globals document, Event */
  6. import Model from '../../../src/model';
  7. import ButtonView from '../../../src/button/buttonview';
  8. import { createDropdownView } from '../../../src/dropdown/utils';
  9. import closeDropdownOnBlur from '../../../src/dropdown/helpers/closedropdownonblur';
  10. describe( 'closeDropdownOnBlur()', () => {
  11. let dropdownView;
  12. beforeEach( () => {
  13. dropdownView = createDropdownView( new Model(), new ButtonView(), {} );
  14. closeDropdownOnBlur( dropdownView );
  15. dropdownView.render();
  16. document.body.appendChild( dropdownView.element );
  17. } );
  18. afterEach( () => {
  19. if ( dropdownView.element ) {
  20. dropdownView.element.remove();
  21. }
  22. } );
  23. it( 'listens to view#isOpen and reacts to DOM events (valid target)', () => {
  24. // Open the dropdown.
  25. dropdownView.isOpen = true;
  26. // Fire event from outside of the dropdown.
  27. document.body.dispatchEvent( new Event( 'mousedown', {
  28. bubbles: true
  29. } ) );
  30. // Closed the dropdown.
  31. expect( dropdownView.isOpen ).to.be.false;
  32. // Fire event from outside of the dropdown.
  33. document.body.dispatchEvent( new Event( 'mousedown', {
  34. bubbles: true
  35. } ) );
  36. // Dropdown is still closed.
  37. expect( dropdownView.isOpen ).to.be.false;
  38. } );
  39. it( 'listens to view#isOpen and reacts to DOM events (invalid target)', () => {
  40. // Open the dropdown.
  41. dropdownView.isOpen = true;
  42. // Event from view.element should be discarded.
  43. dropdownView.element.dispatchEvent( new Event( 'mousedown', {
  44. bubbles: true
  45. } ) );
  46. // Dropdown is still open.
  47. expect( dropdownView.isOpen ).to.be.true;
  48. // Event from within view.element should be discarded.
  49. const child = document.createElement( 'div' );
  50. dropdownView.element.appendChild( child );
  51. child.dispatchEvent( new Event( 'mousedown', {
  52. bubbles: true
  53. } ) );
  54. // Dropdown is still open.
  55. expect( dropdownView.isOpen ).to.be.true;
  56. } );
  57. } );