dropdown_old.js 2.3 KB

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