NavbarSearch.js 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. /**
  2. * --------------------------------------------
  3. * AdminLTE NavbarSearch.js
  4. * License MIT
  5. * --------------------------------------------
  6. */
  7. import $ from 'jquery'
  8. /**
  9. * Constants
  10. * ====================================================
  11. */
  12. const NAME = 'NavbarSearch'
  13. const DATA_KEY = 'lte.navbar-search'
  14. const JQUERY_NO_CONFLICT = $.fn[NAME]
  15. const SELECTOR_TOGGLE_BUTTON = '[data-widget="navbar-search"]'
  16. const SELECTOR_SEARCH_BLOCK = '.navbar-search-block'
  17. const SELECTOR_SEARCH_INPUT = '.navbar-search-block .form-control'
  18. const CLASS_NAME_OPEN = 'navbar-search-open'
  19. const Default = {
  20. resetOnClose: true
  21. }
  22. /**
  23. * Class Definition
  24. * ====================================================
  25. */
  26. class NavbarSearch {
  27. constructor(_element, _options) {
  28. this._element = _element
  29. this._config = $.extend({}, Default, _options)
  30. }
  31. // Public
  32. open() {
  33. $(SELECTOR_SEARCH_BLOCK).css('display', 'flex').hide().fadeIn().addClass(CLASS_NAME_OPEN)
  34. $(SELECTOR_SEARCH_INPUT).focus()
  35. }
  36. close() {
  37. $(SELECTOR_SEARCH_BLOCK).fadeOut().removeClass(CLASS_NAME_OPEN)
  38. if (this._config.resetOnClose) {
  39. $(SELECTOR_SEARCH_INPUT).val('')
  40. }
  41. }
  42. toggle() {
  43. if ($(SELECTOR_SEARCH_BLOCK).hasClass(CLASS_NAME_OPEN)) {
  44. this.close()
  45. } else {
  46. this.open()
  47. }
  48. }
  49. // Static
  50. static _jQueryInterface(options) {
  51. return this.each(function () {
  52. let data = $(this).data(DATA_KEY)
  53. if (!data) {
  54. data = new NavbarSearch(this, options)
  55. $(this).data(DATA_KEY, data)
  56. }
  57. if (!/toggle|close|open/.test(options)) {
  58. throw new Error(`Undefined method ${options}`)
  59. }
  60. data[options]()
  61. })
  62. }
  63. }
  64. /**
  65. * Data API
  66. * ====================================================
  67. */
  68. $(document).on('click', SELECTOR_TOGGLE_BUTTON, event => {
  69. event.preventDefault()
  70. let button = $(event.currentTarget)
  71. if (button.data('widget') !== 'navbar-search') {
  72. button = button.closest(SELECTOR_TOGGLE_BUTTON)
  73. }
  74. NavbarSearch._jQueryInterface.call(button, 'toggle')
  75. })
  76. /**
  77. * jQuery API
  78. * ====================================================
  79. */
  80. $.fn[NAME] = NavbarSearch._jQueryInterface
  81. $.fn[NAME].Constructor = NavbarSearch
  82. $.fn[NAME].noConflict = function () {
  83. $.fn[NAME] = JQUERY_NO_CONFLICT
  84. return NavbarSearch._jQueryInterface
  85. }
  86. export default NavbarSearch