index.coffee 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. # app/shared/MultiLevelMenu/index.coffee
  2. document.head.insertAdjacentHTML('beforeend','<style type="text/tailwindcss">'+stylFns['app/shared/MultiLevelMenu/index.styl']+'</style>')
  3. module.exports =
  4. name: 'MultiLevelMenu'
  5. render: (new Function '_ctx', '_cache', renderFns['app/shared/MultiLevelMenu/index.pug'])()
  6. data: ->
  7. openSubmenu: null
  8. openSubsubmenu: null
  9. isMobileMenuOpen: false
  10. menuItems: [
  11. {
  12. id: 1
  13. title: 'Мероприятия'
  14. href: '/events'
  15. # children: [
  16. # {
  17. # id: 11
  18. # title: 'Концерты'
  19. # children: [
  20. # { id: 111, title: 'Классическая музыка' }
  21. # { id: 112, title: 'Фольклорные концерты' }
  22. # { id: 113, title: 'Джазовые вечера' }
  23. # ]
  24. # }
  25. # {
  26. # id: 12
  27. # title: 'Фестивали'
  28. # children: [
  29. # { id: 121, title: 'Музыкальные фестивали' }
  30. # { id: 122, title: 'Международные события' }
  31. # ]
  32. # }
  33. # { id: 13, title: 'Все мероприятия' }
  34. # ]
  35. }
  36. {
  37. id: 2
  38. title: 'О зале'
  39. href: '/about'
  40. # children: [
  41. # { id: 21, title: 'История' }
  42. # { id: 22, title: 'Архитектура' }
  43. # { id: 23, title: 'Акустика' }
  44. # { id: 24, title: 'Галерея' }
  45. # ]
  46. }
  47. # {
  48. # id: 3
  49. # title: 'Посетителям'
  50. # children: [
  51. # { id: 31, title: 'Как добраться' }
  52. # { id: 32, title: 'Правила посещения' }
  53. # { id: 33, title: 'Доступная среда' }
  54. # { id: 34, title: 'Архив мероприятий' }
  55. # ]
  56. # }
  57. { id: 4, title: 'Контакты', href: '/contacts' }
  58. ]
  59. beforeUnmount: ->
  60. debug.log "slider start"
  61. methods:
  62. getMenuItemClasses: (item) ->
  63. baseClasses = 'text-gray-700 dark:text-gray-300 hover:text-accent dark:hover:text-accent'
  64. activeClasses = if @openSubmenu == item.id then 'bg-accent bg-opacity-10 text-accent' else 'hover:bg-gray-100 dark:hover:bg-gray-700'
  65. return "#{baseClasses} #{activeClasses}"
  66. handleMobileClick: (item) ->
  67. if window.innerWidth < 768
  68. if item.children
  69. @openSubmenu = if @openSubmenu == item.id then null else item.id
  70. else
  71. @isMobileMenuOpen = false
  72. # Навигация к странице