DirectChat.js 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. /**
  2. * --------------------------------------------
  3. * AdminLTE DirectChat.js
  4. * License MIT
  5. * --------------------------------------------
  6. */
  7. const DirectChat = (($) => {
  8. /**
  9. * Constants
  10. * ====================================================
  11. */
  12. const NAME = 'DirectChat'
  13. const DATA_KEY = 'lte.directchat'
  14. const EVENT_KEY = `.${DATA_KEY}`
  15. const JQUERY_NO_CONFLICT = $.fn[NAME]
  16. const DATA_API_KEY = '.data-api'
  17. const Event = {
  18. TOGGLED: `toggled{EVENT_KEY}`
  19. }
  20. const Selector = {
  21. DATA_TOGGLE: '[data-widget="chat-pane-toggle"]',
  22. DIRECT_CHAT: '.direct-chat'
  23. };
  24. const ClassName = {
  25. DIRECT_CHAT_OPEN: 'direct-chat-contacts-open'
  26. };
  27. /**
  28. * Class Definition
  29. * ====================================================
  30. */
  31. class DirectChat {
  32. constructor(element, config) {
  33. this._element = element
  34. }
  35. toggle() {
  36. $(this._element).parents(Selector.DIRECT_CHAT).first().toggleClass(ClassName.DIRECT_CHAT_OPEN);
  37. const toggledEvent = $.Event(Event.TOGGLED)
  38. $(this._element).trigger(toggledEvent)
  39. }
  40. // Static
  41. static _jQueryInterface(config) {
  42. return this.each(function () {
  43. let data = $(this).data(DATA_KEY)
  44. if (!data) {
  45. data = new DirectChat($(this))
  46. $(this).data(DATA_KEY, data)
  47. }
  48. data[config]()
  49. })
  50. }
  51. }
  52. /**
  53. *
  54. * Data Api implementation
  55. * ====================================================
  56. */
  57. $(document).on('click', Selector.DATA_TOGGLE, function (event) {
  58. if (event) event.preventDefault();
  59. DirectChat._jQueryInterface.call($(this), 'toggle');
  60. });
  61. /**
  62. * jQuery API
  63. * ====================================================
  64. */
  65. $.fn[NAME] = DirectChat._jQueryInterface
  66. $.fn[NAME].Constructor = DirectChat
  67. $.fn[NAME].noConflict = function () {
  68. $.fn[NAME] = JQUERY_NO_CONFLICT
  69. return DirectChat._jQueryInterface
  70. }
  71. return DirectChat
  72. })(jQuery)
  73. export default DirectChat