8
0

closedropdownonblur.js 1.9 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 { createDropdown } from '../../../src/dropdown/utils';
  8. import closeDropdownOnBlur from '../../../src/dropdown/helpers/closedropdownonblur';
  9. describe( 'closeDropdownOnBlur()', () => {
  10. let dropdownView;
  11. beforeEach( () => {
  12. dropdownView = createDropdown( new Model(), {} );
  13. closeDropdownOnBlur( dropdownView );
  14. dropdownView.render();
  15. document.body.appendChild( dropdownView.element );
  16. } );
  17. afterEach( () => {
  18. if ( dropdownView.element ) {
  19. dropdownView.element.remove();
  20. }
  21. } );
  22. it( 'listens to view#isOpen and reacts to DOM events (valid target)', () => {
  23. // Open the dropdown.
  24. dropdownView.isOpen = true;
  25. // Fire event from outside of the dropdown.
  26. document.body.dispatchEvent( new Event( 'mousedown', {
  27. bubbles: true
  28. } ) );
  29. // Closed the dropdown.
  30. expect( dropdownView.isOpen ).to.be.false;
  31. // Fire event from outside of the dropdown.
  32. document.body.dispatchEvent( new Event( 'mousedown', {
  33. bubbles: true
  34. } ) );
  35. // Dropdown is still closed.
  36. expect( dropdownView.isOpen ).to.be.false;
  37. } );
  38. it( 'listens to view#isOpen and reacts to DOM events (invalid target)', () => {
  39. // Open the dropdown.
  40. dropdownView.isOpen = true;
  41. // Event from view.element should be discarded.
  42. dropdownView.element.dispatchEvent( new Event( 'mousedown', {
  43. bubbles: true
  44. } ) );
  45. // Dropdown is still open.
  46. expect( dropdownView.isOpen ).to.be.true;
  47. // Event from within view.element should be discarded.
  48. const child = document.createElement( 'div' );
  49. dropdownView.element.appendChild( child );
  50. child.dispatchEvent( new Event( 'mousedown', {
  51. bubbles: true
  52. } ) );
  53. // Dropdown is still open.
  54. expect( dropdownView.isOpen ).to.be.true;
  55. } );
  56. } );