You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

144 regels
7.3 KiB

  1. {# templates/_sections/nav.html.twig #}
  2. {% set currentRoute = app.request.attributes.get('_route') %}
  3. <nav class="main-nav">
  4. <div class="main-nav__left">
  5. <a href="{{ path('timetracking_week') }}"
  6. class="main-nav__item{% if currentRoute starts with 'timetracking' %} main-nav__item--active{% endif %}">
  7. {{ 'app.nav.time_tracking'|trans }}
  8. </a>
  9. {% if app.user %}
  10. <div class="main-nav__stopwatch-wrap">
  11. <button class="main-nav__stopwatch" id="stopwatch-toggle"
  12. title="{{ 'app.stopwatch.title'|trans }}"
  13. aria-expanded="false">
  14. {% include '_atoms/icon-stopwatch.html.twig' %}
  15. <span class="main-nav__stopwatch-time" id="stopwatch-header-time" hidden></span>
  16. </button>
  17. <div class="stopwatch-popover" id="stopwatch-popover" hidden>
  18. <div class="stopwatch-popover__timer" id="stopwatch-display">0:00</div>
  19. <div class="stopwatch-popover__form">
  20. <div id="stopwatch-project" class="searchable-select" data-placeholder="{{ 'app.stopwatch.select_project'|trans }}"></div>
  21. <div id="stopwatch-service" class="searchable-select" data-placeholder="{{ 'app.stopwatch.select_service'|trans }}"></div>
  22. <textarea id="stopwatch-note" class="textarea" rows="2"
  23. placeholder="{{ 'app.entry.placeholder_note'|trans }}"></textarea>
  24. <div class="stopwatch-popover__actions">
  25. <button type="button" class="btn btn-primary" id="stopwatch-start">
  26. {{ 'app.stopwatch.btn_start'|trans }}
  27. </button>
  28. </div>
  29. </div>
  30. </div>
  31. </div>
  32. {% endif %}
  33. <a href="{{ path('report_times') }}"
  34. class="main-nav__item{% if currentRoute starts with 'report' %} main-nav__item--active{% endif %}">
  35. {{ 'app.nav.reports'|trans }}
  36. </a>
  37. </div>
  38. <div class="main-nav__right">
  39. {% if isCurrentUserMemberOrAdmin() %}
  40. <a href="{{ path('client_index') }}"
  41. class="main-nav__item{% if currentRoute starts with 'client' %} main-nav__item--active{% endif %}">
  42. {{ 'app.nav.clients'|trans }}
  43. </a>
  44. <a href="{{ path('project_index') }}"
  45. class="main-nav__item{% if currentRoute starts with 'project' %} main-nav__item--active{% endif %}">
  46. {{ 'app.nav.projects'|trans }}
  47. </a>
  48. <a href="{{ path('service_index') }}"
  49. class="main-nav__item{% if currentRoute starts with 'service' %} main-nav__item--active{% endif %}">
  50. {{ 'app.nav.services'|trans }}
  51. </a>
  52. {% endif %}
  53. {% if isCurrentUserAdmin() %}
  54. <a href="{{ path('team_index') }}"
  55. class="main-nav__item{% if currentRoute starts with 'team' %} main-nav__item--active{% endif %}">
  56. {{ 'app.nav.team'|trans }}
  57. </a>
  58. {% endif %}
  59. <a href="{{ path('account_index') }}"
  60. class="main-nav__item{% if currentRoute starts with 'account' %} main-nav__item--active{% endif %}">
  61. {{ 'app.nav.account'|trans }}
  62. </a>
  63. <a href="{{ path('app_logout') }}" class="main-nav__item">
  64. {{ 'app.nav.logout'|trans }}
  65. </a>
  66. </div>
  67. </nav>
  68. {# Hamburger-Navigation — nur im Minimal-Theme sichtbar (via CSS) #}
  69. <div class="hamburger-nav" id="hamburger-nav">
  70. <button class="hamburger-nav__toggle" id="hamburger-toggle" aria-label="{{ 'app.nav.menu_open'|trans }}" aria-expanded="false">
  71. <span class="hamburger-nav__icon"></span>
  72. </button>
  73. <div class="hamburger-nav__panel" id="hamburger-panel" hidden>
  74. <a href="{{ path('timetracking_week') }}"
  75. class="hamburger-nav__item{% if currentRoute starts with 'timetracking' %} hamburger-nav__item--active{% endif %}">
  76. {{ 'app.nav.time_tracking'|trans }}
  77. </a>
  78. {% if app.user %}
  79. <button class="hamburger-nav__stopwatch" id="hamburger-stopwatch">
  80. {% include '_atoms/icon-stopwatch.html.twig' %}
  81. <span>{{ 'app.stopwatch.title'|trans }}</span>
  82. </button>
  83. {% endif %}
  84. <a href="{{ path('report_times') }}"
  85. class="hamburger-nav__item{% if currentRoute starts with 'report' %} hamburger-nav__item--active{% endif %}">
  86. {{ 'app.nav.reports'|trans }}
  87. </a>
  88. {% if isCurrentUserMemberOrAdmin() %}
  89. <a href="{{ path('client_index') }}"
  90. class="hamburger-nav__item{% if currentRoute starts with 'client' %} hamburger-nav__item--active{% endif %}">
  91. {{ 'app.nav.clients'|trans }}
  92. </a>
  93. <a href="{{ path('project_index') }}"
  94. class="hamburger-nav__item{% if currentRoute starts with 'project' %} hamburger-nav__item--active{% endif %}">
  95. {{ 'app.nav.projects'|trans }}
  96. </a>
  97. <a href="{{ path('service_index') }}"
  98. class="hamburger-nav__item{% if currentRoute starts with 'service' %} hamburger-nav__item--active{% endif %}">
  99. {{ 'app.nav.services'|trans }}
  100. </a>
  101. {% endif %}
  102. {% if isCurrentUserAdmin() %}
  103. <a href="{{ path('team_index') }}"
  104. class="hamburger-nav__item{% if currentRoute starts with 'team' %} hamburger-nav__item--active{% endif %}">
  105. {{ 'app.nav.team'|trans }}
  106. </a>
  107. {% endif %}
  108. <div class="hamburger-nav__divider"></div>
  109. <a href="{{ path('account_index', {tab: 'user'}) }}"
  110. class="hamburger-nav__item{% if currentRoute starts with 'account' %} hamburger-nav__item--active{% endif %}">
  111. {{ 'app.nav.account'|trans }}
  112. </a>
  113. <a href="{{ path('app_logout') }}" class="hamburger-nav__item">
  114. {{ 'app.nav.logout'|trans }}
  115. </a>
  116. </div>
  117. </div>
  118. {% if app.user %}
  119. <script>
  120. window.STOPWATCH = {
  121. trackingInterval: {{ trackingInterval() }},
  122. i18n: {
  123. title: {{ 'app.stopwatch.title'|trans|json_encode|raw }},
  124. btnStart: {{ 'app.stopwatch.btn_start'|trans|json_encode|raw }},
  125. btnStop: {{ 'app.stopwatch.btn_stop'|trans|json_encode|raw }},
  126. resume: {{ 'app.stopwatch.resume'|trans|json_encode|raw }},
  127. confirmReplace: {{ 'app.stopwatch.confirm_replace'|trans|json_encode|raw }},
  128. confirmStop: {{ 'app.stopwatch.confirm_stop'|trans|json_encode|raw }},
  129. errorStart: {{ 'app.stopwatch.error_start'|trans|json_encode|raw }},
  130. errorStop: {{ 'app.stopwatch.error_stop'|trans|json_encode|raw }},
  131. selectPh: {{ 'app.entry.select_placeholder'|trans|json_encode|raw }},
  132. billable: {{ 'app.service.billable'|trans|json_encode|raw }},
  133. notBillable: {{ 'app.service.not_billable'|trans|json_encode|raw }},
  134. placeholderNote:{{ 'app.entry.placeholder_note'|trans|json_encode|raw }},
  135. selectProject: {{ 'app.stopwatch.select_project'|trans|json_encode|raw }},
  136. selectService: {{ 'app.stopwatch.select_service'|trans|json_encode|raw }},
  137. search: {{ 'app.stopwatch.search'|trans|json_encode|raw }},
  138. },
  139. };
  140. </script>
  141. {% endif %}