Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.
 
 
 
 
 

163 lignes
8.7 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. <span class="main-nav__stopwatch-icon">{% include '_atoms/icon-stopwatch.html.twig' %}</span>
  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 main-nav__item--icon{% if currentRoute starts with 'team' %} main-nav__item--active{% endif %}">
  56. {% include '_atoms/icon-team.html.twig' %}
  57. {{ 'app.nav.team'|trans }}
  58. </a>
  59. {% endif %}
  60. <a href="{{ path('account_index') }}"
  61. class="main-nav__item main-nav__item--icon{% if currentRoute starts with 'account' %} main-nav__item--active{% endif %}">
  62. {% include '_atoms/icon-user.html.twig' %}
  63. {{ 'app.nav.account'|trans }}
  64. </a>
  65. <a href="{{ path('app_logout') }}" class="main-nav__logout" title="{{ 'app.nav.logout'|trans }}">
  66. {% include '_atoms/icon-logout.html.twig' %}
  67. </a>
  68. </div>
  69. </nav>
  70. {# Hamburger-Navigation — nur im Minimal-Theme sichtbar (via CSS) #}
  71. <div class="hamburger-nav" id="hamburger-nav">
  72. {% if app.user %}
  73. <div class="hamburger-nav__stopwatch-wrap">
  74. <button class="hamburger-nav__stopwatch" id="hamburger-stopwatch"
  75. title="{{ 'app.stopwatch.title'|trans }}">
  76. <span class="hamburger-nav__stopwatch-icon">{% include '_atoms/icon-stopwatch.html.twig' %}</span>
  77. <span class="hamburger-nav__stopwatch-time" id="hamburger-stopwatch-time" hidden></span>
  78. </button>
  79. <div class="stopwatch-popover stopwatch-popover--hamburger" id="hamburger-stopwatch-popover" hidden>
  80. <div class="stopwatch-popover__timer" id="hamburger-stopwatch-display">0:00</div>
  81. <div class="stopwatch-popover__form">
  82. <div id="hamburger-sw-project" class="searchable-select" data-placeholder="{{ 'app.stopwatch.select_project'|trans }}"></div>
  83. <div id="hamburger-sw-service" class="searchable-select" data-placeholder="{{ 'app.stopwatch.select_service'|trans }}"></div>
  84. <textarea id="hamburger-sw-note" class="textarea" rows="2"
  85. placeholder="{{ 'app.entry.placeholder_note'|trans }}"></textarea>
  86. <div class="stopwatch-popover__actions">
  87. <button type="button" class="btn btn-primary" id="hamburger-sw-start">
  88. {{ 'app.stopwatch.btn_start'|trans }}
  89. </button>
  90. </div>
  91. </div>
  92. </div>
  93. </div>
  94. {% endif %}
  95. <button class="hamburger-nav__toggle" id="hamburger-toggle" aria-label="{{ 'app.nav.menu_open'|trans }}" aria-expanded="false">
  96. <span class="hamburger-nav__icon"></span>
  97. </button>
  98. <div class="hamburger-nav__panel" id="hamburger-panel" hidden>
  99. <a href="{{ path('timetracking_week') }}"
  100. class="hamburger-nav__item{% if currentRoute starts with 'timetracking' %} hamburger-nav__item--active{% endif %}">
  101. {{ 'app.nav.time_tracking'|trans }}
  102. </a>
  103. <a href="{{ path('report_times') }}"
  104. class="hamburger-nav__item{% if currentRoute starts with 'report' %} hamburger-nav__item--active{% endif %}">
  105. {{ 'app.nav.reports'|trans }}
  106. </a>
  107. {% if isCurrentUserMemberOrAdmin() %}
  108. <a href="{{ path('client_index') }}"
  109. class="hamburger-nav__item{% if currentRoute starts with 'client' %} hamburger-nav__item--active{% endif %}">
  110. {{ 'app.nav.clients'|trans }}
  111. </a>
  112. <a href="{{ path('project_index') }}"
  113. class="hamburger-nav__item{% if currentRoute starts with 'project' %} hamburger-nav__item--active{% endif %}">
  114. {{ 'app.nav.projects'|trans }}
  115. </a>
  116. <a href="{{ path('service_index') }}"
  117. class="hamburger-nav__item{% if currentRoute starts with 'service' %} hamburger-nav__item--active{% endif %}">
  118. {{ 'app.nav.services'|trans }}
  119. </a>
  120. {% endif %}
  121. {% if isCurrentUserAdmin() %}
  122. <a href="{{ path('team_index') }}"
  123. class="hamburger-nav__item{% if currentRoute starts with 'team' %} hamburger-nav__item--active{% endif %}">
  124. {{ 'app.nav.team'|trans }}
  125. </a>
  126. {% endif %}
  127. <div class="hamburger-nav__divider"></div>
  128. <a href="{{ path('account_index', {tab: 'user'}) }}"
  129. class="hamburger-nav__item{% if currentRoute starts with 'account' %} hamburger-nav__item--active{% endif %}">
  130. {{ 'app.nav.account'|trans }}
  131. </a>
  132. <a href="{{ path('app_logout') }}" class="hamburger-nav__item">
  133. {{ 'app.nav.logout'|trans }}
  134. </a>
  135. </div>
  136. </div>
  137. {% if app.user %}
  138. <script>
  139. window.STOPWATCH = {
  140. trackingInterval: {{ trackingInterval() }},
  141. i18n: {
  142. title: {{ 'app.stopwatch.title'|trans|json_encode|raw }},
  143. btnStart: {{ 'app.stopwatch.btn_start'|trans|json_encode|raw }},
  144. btnStop: {{ 'app.stopwatch.btn_stop'|trans|json_encode|raw }},
  145. resume: {{ 'app.stopwatch.resume'|trans|json_encode|raw }},
  146. confirmReplace: {{ 'app.stopwatch.confirm_replace'|trans|json_encode|raw }},
  147. confirmStop: {{ 'app.stopwatch.confirm_stop'|trans|json_encode|raw }},
  148. errorStart: {{ 'app.stopwatch.error_start'|trans|json_encode|raw }},
  149. errorStop: {{ 'app.stopwatch.error_stop'|trans|json_encode|raw }},
  150. selectPh: {{ 'app.entry.select_placeholder'|trans|json_encode|raw }},
  151. billable: {{ 'app.service.billable'|trans|json_encode|raw }},
  152. notBillable: {{ 'app.service.not_billable'|trans|json_encode|raw }},
  153. placeholderNote:{{ 'app.entry.placeholder_note'|trans|json_encode|raw }},
  154. selectProject: {{ 'app.stopwatch.select_project'|trans|json_encode|raw }},
  155. selectService: {{ 'app.stopwatch.select_service'|trans|json_encode|raw }},
  156. search: {{ 'app.stopwatch.search'|trans|json_encode|raw }},
  157. },
  158. };
  159. </script>
  160. {% endif %}