dropdown.js 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. /**
  2. * Copyright © Magento, Inc. All rights reserved.
  3. * See COPYING.txt for license details.
  4. */
  5. (function () {
  6. 'use strict';
  7. $(document)
  8. .on('click.dropdown', function (event) {
  9. if (!$(event.target).is('[data-toggle=dropdown].active, ' +
  10. '[data-toggle=dropdown].active *, ' +
  11. '[data-toggle=dropdown].active + .dropdown-menu, ' +
  12. '[data-toggle=dropdown].active + .dropdown-menu *,' +
  13. '[data-toggle=dropdown].active + [data-target="dropdown"],' +
  14. '[data-toggle=dropdown].active + [data-target="dropdown"] *')
  15. ) {
  16. $('[data-toggle=dropdown].active').trigger('close.dropdown');
  17. }
  18. })
  19. .on('keyup.dropdown', function (event) {
  20. if (event.keyCode === 27) { // escape key
  21. $('[data-toggle=dropdown].active').trigger('close.dropdown');
  22. }
  23. });
  24. /** @function dropdown */
  25. $.fn.dropdown = function (options) {
  26. options = $.extend({
  27. parent: null,
  28. btnArrow: '.arrow',
  29. activeClass: 'active'
  30. }, options);
  31. return this.each(function () {
  32. var elem = $(this);
  33. elem.off('open.dropdown, close.dropdown, click.dropdown');
  34. elem.on('open.dropdown', function () {
  35. elem.addClass(options.activeClass)
  36. .parent()
  37. .addClass(options.activeClass);
  38. elem.find(options.btnArrow).text('\u25b2'); // arrow up
  39. });
  40. elem.on('close.dropdown', function () {
  41. elem.removeClass(options.activeClass)
  42. .parent()
  43. .removeClass(options.activeClass);
  44. elem.find(options.btnArrow).text('\u25bc'); // arrow down
  45. });
  46. elem.on('click.dropdown', function () {
  47. var isActive = elem.hasClass('active');
  48. $('[data-toggle=dropdown].active').trigger('close.dropdown');
  49. elem.trigger(isActive ? 'close.dropdown' : 'open.dropdown');
  50. return false;
  51. });
  52. });
  53. };
  54. $(document).ready(function () {
  55. $('[data-toggle=dropdown]').dropdown();
  56. });
  57. })();