Merge remote-tracking branch 'origin/release/10.6' into dev

pull/8429/head
Henriette Darge 4 years ago
commit c5405c5549
  1. BIN
      .DS_Store
  2. 6
      app/assets/stylesheets/content/_forms.sass
  3. 23
      app/assets/stylesheets/content/_modal.lsg
  4. 17
      app/assets/stylesheets/content/_modal.sass
  5. 9
      app/assets/stylesheets/content/editor/_ckeditor.sass
  6. 8
      app/assets/stylesheets/content/editor/_markdown.sass
  7. 67
      app/assets/stylesheets/layout/work_packages/_print.sass
  8. 8
      config/locales/crowdin/ar.yml
  9. 8
      config/locales/crowdin/bg.yml
  10. 8
      config/locales/crowdin/ca.yml
  11. 8
      config/locales/crowdin/cs.yml
  12. 8
      config/locales/crowdin/da.yml
  13. 8
      config/locales/crowdin/de.yml
  14. 8
      config/locales/crowdin/el.yml
  15. 8
      config/locales/crowdin/es.yml
  16. 8
      config/locales/crowdin/fi.yml
  17. 8
      config/locales/crowdin/fil.yml
  18. 8
      config/locales/crowdin/fr.yml
  19. 8
      config/locales/crowdin/hr.yml
  20. 8
      config/locales/crowdin/hu.yml
  21. 8
      config/locales/crowdin/id.yml
  22. 8
      config/locales/crowdin/it.yml
  23. 8
      config/locales/crowdin/ja.yml
  24. 8
      config/locales/crowdin/ko.yml
  25. 8
      config/locales/crowdin/lt.yml
  26. 8
      config/locales/crowdin/nl.yml
  27. 8
      config/locales/crowdin/no.yml
  28. 8
      config/locales/crowdin/pl.yml
  29. 8
      config/locales/crowdin/pt-BR.yml
  30. 8
      config/locales/crowdin/pt.yml
  31. 8
      config/locales/crowdin/ro.yml
  32. 8
      config/locales/crowdin/ru.yml
  33. 8
      config/locales/crowdin/sk.yml
  34. 8
      config/locales/crowdin/sl.yml
  35. 8
      config/locales/crowdin/sv.yml
  36. 8
      config/locales/crowdin/tr.yml
  37. 8
      config/locales/crowdin/uk.yml
  38. 8
      config/locales/crowdin/vi.yml
  39. 8
      config/locales/crowdin/zh-CN.yml
  40. 8
      config/locales/crowdin/zh-TW.yml
  41. 3
      config/locales/js-en.yml
  42. BIN
      docs/.DS_Store
  43. 2
      docs/system-admin-guide/manage-work-packages/custom-actions/README.md
  44. BIN
      docs/system-admin-guide/manage-work-packages/custom-actions/custom action demo copy.gif
  45. 24
      frontend/src/app/components/modals/confirm-dialog/confirm-dialog.modal.html
  46. 8
      frontend/src/app/components/modals/confirm-dialog/confirm-dialog.modal.sass
  47. 14
      frontend/src/app/components/modals/confirm-dialog/confirm-dialog.modal.ts
  48. 142
      frontend/src/app/components/modals/wp-destroy-modal/wp-destroy.modal.html
  49. 2
      frontend/src/app/components/wp-fast-table/builders/modes/hierarchy/hierarchy-render-pass.ts
  50. 13
      frontend/src/app/components/wp-relations/wp-relations-hierarchy/wp-relations-hierarchy.directive.ts
  51. 5
      frontend/src/app/components/wp-relations/wp-relations-hierarchy/wp-relations-hierarchy.service.ts
  52. 2
      frontend/src/app/components/wp-table/drag-and-drop/actions/hierarchy-drag-action.service.ts
  53. 14
      frontend/src/app/modules/grids/widgets/time-entries/list/time-entries-list.component.ts
  54. 4
      frontend/src/app/modules/hal/resources/work-package-resource.ts
  55. 67
      frontend/src/app/modules/time_entries/edit/trigger-actions-entry.component.ts
  56. 8
      modules/auth_saml/lib/open_project/auth_saml/engine.rb
  57. 2
      modules/bim/config/locales/en.seeders.bim.yml
  58. 0
      modules/bim/files/seed.bcf
  59. 4
      modules/bim/lib/open_project/bim/bcf_xml/exporter.rb
  60. 6
      modules/bim/spec/requests/api/bcf_xml/v1/bcf_xml_api_spec.rb
  61. 4
      modules/dashboards/config/locales/crowdin/vi.yml
  62. 3
      modules/reporting/config/locales/crowdin/ar.yml
  63. 3
      modules/reporting/config/locales/crowdin/bg.yml
  64. 3
      modules/reporting/config/locales/crowdin/ca.yml
  65. 3
      modules/reporting/config/locales/crowdin/cs.yml
  66. 3
      modules/reporting/config/locales/crowdin/da.yml
  67. 3
      modules/reporting/config/locales/crowdin/de.yml
  68. 3
      modules/reporting/config/locales/crowdin/el.yml
  69. 3
      modules/reporting/config/locales/crowdin/es.yml
  70. 3
      modules/reporting/config/locales/crowdin/fi.yml
  71. 3
      modules/reporting/config/locales/crowdin/fil.yml
  72. 3
      modules/reporting/config/locales/crowdin/fr.yml
  73. 3
      modules/reporting/config/locales/crowdin/hr.yml
  74. 3
      modules/reporting/config/locales/crowdin/hu.yml
  75. 3
      modules/reporting/config/locales/crowdin/id.yml
  76. 3
      modules/reporting/config/locales/crowdin/it.yml
  77. 3
      modules/reporting/config/locales/crowdin/ja.yml
  78. 3
      modules/reporting/config/locales/crowdin/ko.yml
  79. 3
      modules/reporting/config/locales/crowdin/lt.yml
  80. 3
      modules/reporting/config/locales/crowdin/nl.yml
  81. 3
      modules/reporting/config/locales/crowdin/no.yml
  82. 3
      modules/reporting/config/locales/crowdin/pl.yml
  83. 3
      modules/reporting/config/locales/crowdin/pt-BR.yml
  84. 3
      modules/reporting/config/locales/crowdin/pt.yml
  85. 3
      modules/reporting/config/locales/crowdin/ro.yml
  86. 3
      modules/reporting/config/locales/crowdin/ru.yml
  87. 3
      modules/reporting/config/locales/crowdin/sk.yml
  88. 3
      modules/reporting/config/locales/crowdin/sl.yml
  89. 3
      modules/reporting/config/locales/crowdin/sv.yml
  90. 3
      modules/reporting/config/locales/crowdin/tr.yml
  91. 3
      modules/reporting/config/locales/crowdin/uk.yml
  92. 3
      modules/reporting/config/locales/crowdin/vi.yml
  93. 3
      modules/reporting/config/locales/crowdin/zh-CN.yml
  94. 3
      modules/reporting/config/locales/crowdin/zh-TW.yml
  95. 72
      spec/features/wysiwyg/tables_spec.rb

BIN
.DS_Store vendored

Binary file not shown.

@ -181,12 +181,6 @@ hr
.form--space
padding-top: 1rem
&.-left-spacing
padding-left: 1rem
&.-big
padding-top: 20px
.form--row
@include grid-block
@include grid-visible-overflow

@ -55,7 +55,7 @@
</ul>
```
## Modals: With footer
## Modals: Highlighted and with footer
```
<div class="op-modal--modal-container -highlight">
@ -87,3 +87,24 @@
</div>
</div>
```
## Modals: Danger zone highlighting
```
<div class="op-modal--modal-container -highlight -danger-zone">
<div class="op-modal--modal-header">
<h3 class="icon-context icon-warning">Confirm deletion of Work Package</h3>
<a class="op-modal--modal-close-button" title="Close popup">
<i class="icon-close"></i>
</a>
</div>
<div class="op-modal--modal-body">
<p>Are you sure you want to delete the following work package?<p>
<p> ... </p>
</div>
<div class="op-modal--modal-footer">
<button name="button" type="submit" class="button -danger">Continue</button>
<button name="button" type="submit" class="button">Cancel</button>
</div>
</div>
```

@ -88,7 +88,6 @@ $modal-footer-height: $modal-header-height
margin-bottom: 0px
.op-modal--modal-footer
margin: 1em 0
padding: 0 1.5rem
button:last-of-type
@ -127,6 +126,10 @@ $modal-footer-height: $modal-header-height
h2, h3
@include text-shortener
margin: 0
border: none
.op-modal--modal-footer
margin: 1em 0
.op-modal--modal-close-button
right: 10px
@ -134,10 +137,18 @@ $modal-footer-height: $modal-header-height
@include varprop(line-height, modal-header-height)
@include varprop(color, header-item-font-color)
.avatar,
.icon-context
.avatar
margin-right: 0.5rem
&.-danger-zone
.op-modal--modal-header
@include varprop(background-color, content-form-danger-zone-bg-color)
@include varprop(border-bottom-color, content-form-danger-zone-bg-color)
.op-modal--modal-close-button
@include varprop(color, content-form-danger-zone-font-color)
// Specific styles for columns-modal
.columns-modal--content
margin-bottom: 15px

@ -32,6 +32,15 @@ ckeditor-augmented-textarea .op-ckeditor--wrapper
figure.image
margin: 1em 0
figure.table
// Ensure we break apart words in table cells that
// are restricted in width (OP#33524)
td[style*=";width:"],
td[style^="width:"],
th[style*=";width:"],
th[style^="width:"]
word-break: break-all
.ck .ck-widget.op-ckeditor--code-block
// Display content as pre
white-space: pre-wrap

@ -55,3 +55,11 @@ div.ck-editor__preview
> table
height: 100%
width: 100%
// Ensure we break apart words in table cells that
// are restricted in width (OP#33524)
td[style*=";width:"],
td[style^="width:"],
th[style*=";width:"],
th[style^="width:"]
word-break: break-all

@ -17,19 +17,26 @@
border: none
overflow: visible !important
position: relative
grid-template-columns: auto
#content-wrapper,
#content
margin: 0
width: 100%
height: 100%
overflow: visible !important
position: relative
.work-packages-partitioned-page--content-right
.work-packages--details-toolbar-container
display: none
.work-packages-partitioned-query-space--container
padding-left: 0
.work-packages-split-view--tabletimeline-side
.work-packages-split-view--tabletimeline-content
height: 100%
.wp-table--hierarchy-aditional-row,
tr.-checked,
.row-hovered
@ -60,47 +67,31 @@
overflow: hidden
// -------------------- Sepcial Rules for FF --------------------
html.-browser-firefox
body.-browser-firefox
#wrapper,
#main,
.work-packages-partitioned-query-space--container,
.work-packages-partitioned-page--content-container,
.work-packages-split-view--tabletimeline-side,
.work-packages-split-view--tabletimeline-content
display: block !important
.router--work-packages-partitioned-split-view,
.router--work-packages-full-view,
.router--work-packages-full-create
#main
display: block
#content-wrapper,
#content
.work-packages-partitioned-query-space--container
display: block
.toolbar-container
display: none
.work-packages-split-view
display: block
.work-packages-split-view--tabletimeline-side
display: block
.work-packages-split-view--tabletimeline-content
display: block
.work-packages-split-view--tabletimeline-side
display: none
.work-packages-tabletimeline--table-side
&.-timeline-visible
display: initial
&.-timeline-visible
thead
// Undo that hack from above for FF
display: table-header-group
.work-packages-tabletimeline--timeline-side
// As this print is worthless, we remove it for FF
display: none !important
html.-browser-firefox,
html.-browser-edge
.router--work-packages-full-view,
.work-packages--show-view,
.work-packages-full-view--split-container
display: block
.work-packages-partitioned-query-space--container
.toolbar-container
display: none
.work-packages-partitioned-page--content-right
.work-packages--details-content
position: relative
body.-browser-firefox,
body.-browser-edge
.work-packages--show-view,
.work-packages-full-view--split-container
display: block
// ------------------Only WP full screen view ------------------
.router--work-packages-full-view

@ -418,7 +418,6 @@ ar:
types: "الأنواع"
versions: "الإصدارات"
work_packages: "مجموعات العمل"
templated: 'Template project'
projects/status:
code: 'الحالة'
explanation: 'Status description'
@ -490,7 +489,6 @@ ar:
parent_work_package: "الجذر"
priority: "الأولوية"
progress: "التقدم (%)"
schedule_manually: "Schedule manually"
spent_hours: "الوقت المستهلك"
spent_time: "الوقت المستهلك"
subproject: "مشروع فرعي"
@ -2030,12 +2028,6 @@ ar:
warning_one: وسيكون أعضاء المشروع إلى نقل مستودعات للمشروع.
warning_two: لن تعد تعمل الارتباطات الموجودة في المشروع.
title: تغيير معرف المشروع
template:
copying: >
Your project is being created from the selected template project. You will be notified by mail as soon as the project is available.
use_template: 'Use template'
make_template: 'Set as template'
remove_from_templates: 'Remove from templates'
archive:
are_you_sure: "هل أنت متأكد من أنك تريد أرشفة المشروع '%{name}'؟"
archived: "Archived"

@ -414,7 +414,6 @@ bg:
types: "Видове"
versions: "Версии"
work_packages: "Работен пакет"
templated: 'Template project'
projects/status:
code: 'Състояние'
explanation: 'Status description'
@ -486,7 +485,6 @@ bg:
parent_work_package: "Горна категория"
priority: "Приоритет"
progress: "Прогрес (%)"
schedule_manually: "Schedule manually"
spent_hours: "Отработено време"
spent_time: "Отработено време"
subproject: "Подпроект"
@ -1946,12 +1944,6 @@ bg:
warning_one: Members of the project will have to relocate the project's repositories.
warning_two: Existing links to the project will no longer work.
title: Change the project's identifier
template:
copying: >
Your project is being created from the selected template project. You will be notified by mail as soon as the project is available.
use_template: 'Use template'
make_template: 'Set as template'
remove_from_templates: 'Remove from templates'
archive:
are_you_sure: "Наистина ли искате да архивирате на проекта \"%{name}\"?"
archived: "Archived"

@ -414,7 +414,6 @@ ca:
types: "Tipus"
versions: "Versions"
work_packages: "Paquets de treball"
templated: 'Template project'
projects/status:
code: 'Estat'
explanation: 'Status description'
@ -486,7 +485,6 @@ ca:
parent_work_package: "Pare"
priority: "Prioritat"
progress: "Progrés (%)"
schedule_manually: "Schedule manually"
spent_hours: "Temps invertit"
spent_time: "Temps invertit"
subproject: "Subprojecte"
@ -1946,12 +1944,6 @@ ca:
warning_one: Els membres del projecte hauran de reubicar els repositoris del projecte.
warning_two: Els vncles existents al projecte ja no funcionaran.
title: Canviar l'identificador del projecte
template:
copying: >
Your project is being created from the selected template project. You will be notified by mail as soon as the project is available.
use_template: 'Use template'
make_template: 'Set as template'
remove_from_templates: 'Remove from templates'
archive:
are_you_sure: "Esteu segur que voleu arxivar el projecte \"%{name}\"?"
archived: "Archived"

@ -416,7 +416,6 @@ cs:
types: "Typy"
versions: "Verze"
work_packages: "Pracovní balíčky"
templated: 'Template project'
projects/status:
code: 'Stav'
explanation: 'Status description'
@ -488,7 +487,6 @@ cs:
parent_work_package: "Rodič"
priority: "Priorita"
progress: "Průběh (%)"
schedule_manually: "Schedule manually"
spent_hours: "Strávený čas"
spent_time: "Strávený čas"
subproject: "Dílčí projekt"
@ -1987,12 +1985,6 @@ cs:
warning_one: Členové projektu budou muset přemístit úložiště projektu.
warning_two: Existující odkazy na projekt nebudou nadále fungovat.
title: Změnit identifikátor projektu
template:
copying: >
Your project is being created from the selected template project. You will be notified by mail as soon as the project is available.
use_template: 'Use template'
make_template: 'Set as template'
remove_from_templates: 'Remove from templates'
archive:
are_you_sure: "Opravdu chcete archivovat projekt '%{name}'?"
archived: "Archived"

@ -414,7 +414,6 @@ da:
types: "Typer"
versions: "Versioner"
work_packages: "Arbejdspakker"
templated: 'Template project'
projects/status:
code: 'Status'
explanation: 'Statusbeskrivelse'
@ -486,7 +485,6 @@ da:
parent_work_package: "Overordnet"
priority: "Prioritet"
progress: "Fremskridt (%)"
schedule_manually: "Schedule manually"
spent_hours: "Anvendt tid"
spent_time: "Anvendt tid"
subproject: "Underprojekt"
@ -1946,12 +1944,6 @@ da:
warning_one: Members of the project will have to relocate the project's repositories.
warning_two: Existing links to the project will no longer work.
title: Change the project's identifier
template:
copying: >
Your project is being created from the selected template project. You will be notified by mail as soon as the project is available.
use_template: 'Use template'
make_template: 'Set as template'
remove_from_templates: 'Remove from templates'
archive:
are_you_sure: "Are you sure you want to archive the project '%{name}'?"
archived: "Archived"

@ -409,7 +409,6 @@ de:
types: "Typen"
versions: "Versionen"
work_packages: "Arbeitspakete"
templated: 'Template project'
projects/status:
code: 'Status'
explanation: 'Statusbeschreibung'
@ -481,7 +480,6 @@ de:
parent_work_package: "Übergeordnetes Arbeitspaket"
priority: "Priorität"
progress: "Fortschritt (%)"
schedule_manually: "Schedule manually"
spent_hours: "Aufgewendete Zeit"
spent_time: "Aufgewendete Zeit"
subproject: "Unterprojekt"
@ -1941,12 +1939,6 @@ de:
warning_one: Projektmitglieder müssen die Projektarchive des Projekts umziehen.
warning_two: Bestehende Projekt-Links werden nicht mehr funktionieren.
title: Projektkennung ändern
template:
copying: >
Your project is being created from the selected template project. You will be notified by mail as soon as the project is available.
use_template: 'Use template'
make_template: 'Set as template'
remove_from_templates: 'Remove from templates'
archive:
are_you_sure: "Sind Sie sicher, dass Sie das Projekt '%{name}' archivieren wollen?"
archived: "Archiviert"

@ -411,7 +411,6 @@ el:
types: "Τύποι"
versions: "Εκδόσεις"
work_packages: "Εργασίες"
templated: 'Template project'
projects/status:
code: 'Κατάσταση'
explanation: 'Περιγραφή κατάστασης'
@ -483,7 +482,6 @@ el:
parent_work_package: "Γονέας"
priority: "Προτεραιότητα"
progress: "Πρόοδος (%)"
schedule_manually: "Schedule manually"
spent_hours: "Χρόνος που δαπανήθηκε"
spent_time: "Χρόνος που δαπανήθηκε"
subproject: "Υποέργο"
@ -1942,12 +1940,6 @@ el:
warning_one: Τα μέλη του έργου θα πρέπει να μεταφέρουν τα αποθετήρια του έργου.
warning_two: Οι υπάρχοντες σύνδεσμοι για το έργο δεν λειτουργούν πλέον.
title: Αλλαγή αναγνωριστικού του έργου
template:
copying: >
Your project is being created from the selected template project. You will be notified by mail as soon as the project is available.
use_template: 'Use template'
make_template: 'Set as template'
remove_from_templates: 'Remove from templates'
archive:
are_you_sure: "Είστε σίγουροι ότι θέλετε να αρχειοθετήσετε το έργο %{name};"
archived: "Αρχειοθετημένο"

@ -411,7 +411,6 @@ es:
types: "Tipos"
versions: "Versiones"
work_packages: "Paquetes de trabajo"
templated: 'Template project'
projects/status:
code: 'Estado'
explanation: 'Descripción del estado'
@ -483,7 +482,6 @@ es:
parent_work_package: "Padre"
priority: "Prioridad"
progress: "Progreso (%)"
schedule_manually: "Schedule manually"
spent_hours: "Tiempo empleado"
spent_time: "Tiempo empleado"
subproject: "Subproyecto"
@ -1943,12 +1941,6 @@ es:
warning_one: Los miembros del proyecto deberán migrar los repositorios del proyecto.
warning_two: Los links al proyeto existentes dejarán de funcionar.
title: Cambiar el identificador de proyecto
template:
copying: >
Your project is being created from the selected template project. You will be notified by mail as soon as the project is available.
use_template: 'Use template'
make_template: 'Set as template'
remove_from_templates: 'Remove from templates'
archive:
are_you_sure: "¿Está seguro que desea archivar el proyecto '%{name}'?"
archived: "Archivado"

@ -414,7 +414,6 @@ fi:
types: "Tyypit"
versions: "Versiot"
work_packages: "Työpaketit"
templated: 'Template project'
projects/status:
code: 'Tila'
explanation: 'Status description'
@ -486,7 +485,6 @@ fi:
parent_work_package: "Ylätaso"
priority: "Tärkeys"
progress: "Edistyminen (%)"
schedule_manually: "Schedule manually"
spent_hours: "Käytetty aika"
spent_time: "Käytetty aika"
subproject: "Aliprojekti"
@ -1946,12 +1944,6 @@ fi:
warning_one: Members of the project will have to relocate the project's repositories.
warning_two: Projektin nykyiset linkit eivät enää toimi.
title: Muuta projektin tunnistetta
template:
copying: >
Your project is being created from the selected template project. You will be notified by mail as soon as the project is available.
use_template: 'Use template'
make_template: 'Set as template'
remove_from_templates: 'Remove from templates'
archive:
are_you_sure: "Oletko varma, että haluat arkistoida projektin \"%{name}\"?"
archived: "Archived"

@ -414,7 +414,6 @@ fil:
types: "Mga uri"
versions: "Mga bersyon"
work_packages: "Ang mga pakete na ginawa"
templated: 'Template project'
projects/status:
code: 'Estado'
explanation: 'Status description'
@ -486,7 +485,6 @@ fil:
parent_work_package: "Magulang"
priority: "Ang prayoridad"
progress: "Isinasagawa (%)"
schedule_manually: "Schedule manually"
spent_hours: "Nauubos na oras"
spent_time: "Nauubos na oras"
subproject: "Kahaliling proyekto"
@ -1946,12 +1944,6 @@ fil:
warning_one: Ang mga miyembro ng proyekto ay kinakailangang ilipat ang mga repository ng proyekto.
warning_two: Ang mga umiiral na mga link sa proyekto ay hindi na maaring magamit.
title: Baguhin ang mga pagkakilanlan ng proyekto
template:
copying: >
Your project is being created from the selected template project. You will be notified by mail as soon as the project is available.
use_template: 'Use template'
make_template: 'Set as template'
remove_from_templates: 'Remove from templates'
archive:
are_you_sure: "Sigurado ka bang na gusto mong i-archive ang proyekto'%{name}'?"
archived: "Archived"

@ -413,7 +413,6 @@ fr:
types: "Types"
versions: "Versions"
work_packages: "Lots de Travaux"
templated: 'Template project'
projects/status:
code: 'Statut'
explanation: 'Description du statut'
@ -485,7 +484,6 @@ fr:
parent_work_package: "Parent"
priority: "Priorité"
progress: "Progrès (%)"
schedule_manually: "Schedule manually"
spent_hours: "Temps passé"
spent_time: "Temps passé"
subproject: "Sous-projet"
@ -1945,12 +1943,6 @@ fr:
warning_one: Les membres du projet devront déplacer les répertoires du projet.
warning_two: Les liens existants vers le projet ne fonctionneront plus.
title: Modifier l'identifiant du projet
template:
copying: >
Your project is being created from the selected template project. You will be notified by mail as soon as the project is available.
use_template: 'Use template'
make_template: 'Set as template'
remove_from_templates: 'Remove from templates'
archive:
are_you_sure: "Êtes-vous sûr de vouloir archiver le projet '%{name}%' ?"
archived: "Archivé"

@ -415,7 +415,6 @@ hr:
types: "Tipovi"
versions: "Verzije"
work_packages: "Radni paketi"
templated: 'Template project'
projects/status:
code: 'Status'
explanation: 'Status description'
@ -487,7 +486,6 @@ hr:
parent_work_package: "Matični"
priority: "Prioritet"
progress: "Napredak (%)"
schedule_manually: "Schedule manually"
spent_hours: "Utrošeno vrijeme"
spent_time: "Utrošeno vrijeme"
subproject: "Potprojekt"
@ -1967,12 +1965,6 @@ hr:
warning_one: Članovi projekta morati će relocirati repozitorije projketa.
warning_two: Postojeće poveznice na projektu neće više funkcionirati.
title: Promjeni identifikator projekta
template:
copying: >
Your project is being created from the selected template project. You will be notified by mail as soon as the project is available.
use_template: 'Use template'
make_template: 'Set as template'
remove_from_templates: 'Remove from templates'
archive:
are_you_sure: "Are you sure you want to archive the project '%{name}'?"
archived: "Archived"

@ -411,7 +411,6 @@ hu:
types: "Típus"
versions: "Verzió"
work_packages: "Feladatcsoportok"
templated: 'Template project'
projects/status:
code: 'Állapot'
explanation: 'Állapot leírása'
@ -483,7 +482,6 @@ hu:
parent_work_package: "Szülő"
priority: "Fontosság"
progress: "Folyamat állapot (%)"
schedule_manually: "Schedule manually"
spent_hours: "Eltöltött idő"
spent_time: "Eltöltött idő"
subproject: "Alprojekt"
@ -1942,12 +1940,6 @@ hu:
warning_one: A projekt tagjai áthelyezik a projekt tárolóit.
warning_two: A projekthez tartozó hivatkozások már nem működnek.
title: Módosítsa a projekt azonosítóját
template:
copying: >
Your project is being created from the selected template project. You will be notified by mail as soon as the project is available.
use_template: 'Use template'
make_template: 'Set as template'
remove_from_templates: 'Remove from templates'
archive:
are_you_sure: "Biztosan szeretnéd arhiválni a projektet '%{name}'?"
archived: "Archiválva"

@ -412,7 +412,6 @@ id:
types: "Tipe"
versions: "Versi"
work_packages: "Paket-Penugasan"
templated: 'Template project'
projects/status:
code: 'Status'
explanation: 'Status description'
@ -484,7 +483,6 @@ id:
parent_work_package: "Induk"
priority: "Prioritas"
progress: "Progress (%)"
schedule_manually: "Schedule manually"
spent_hours: "Durasi"
spent_time: "Durasi"
subproject: "Sub-Project"
@ -1924,12 +1922,6 @@ id:
warning_one: Members of the project will have to relocate the project's repositories.
warning_two: Existing links to the project will no longer work.
title: Change the project's identifier
template:
copying: >
Your project is being created from the selected template project. You will be notified by mail as soon as the project is available.
use_template: 'Use template'
make_template: 'Set as template'
remove_from_templates: 'Remove from templates'
archive:
are_you_sure: "Are you sure you want to archive the project '%{name}'?"
archived: "Archived"

@ -410,7 +410,6 @@ it:
types: "Tipi"
versions: "Versioni"
work_packages: "Macro-attività"
templated: 'Template project'
projects/status:
code: 'Stato'
explanation: 'Descrizione stato'
@ -482,7 +481,6 @@ it:
parent_work_package: "Superiore"
priority: "Priorità"
progress: "Avanzamento (%)"
schedule_manually: "Schedule manually"
spent_hours: "Tempo speso"
spent_time: "Tempo speso"
subproject: "Sottoprogetto"
@ -1942,12 +1940,6 @@ it:
warning_one: I membri del progetto dovranno trasferire gli archivi del progetto.
warning_two: I collegamenti esistenti al progetto non funzioneranno più.
title: Modifica l'identificatore del progetto
template:
copying: >
Your project is being created from the selected template project. You will be notified by mail as soon as the project is available.
use_template: 'Use template'
make_template: 'Set as template'
remove_from_templates: 'Remove from templates'
archive:
are_you_sure: "Sicuro di voler archiviare il progetto '%{name}'?"
archived: "Archiviato"

@ -411,7 +411,6 @@ ja:
types: "作業項目の型"
versions: "バージョン"
work_packages: "作業項目"
templated: 'Template project'
projects/status:
code: 'ステータス'
explanation: '状況の説明'
@ -483,7 +482,6 @@ ja:
parent_work_package: "親項目"
priority: "優先度"
progress: "進行状況 (%)"
schedule_manually: "Schedule manually"
spent_hours: "作業時間の記録"
spent_time: "作業時間の記録"
subproject: "子プロジェクト"
@ -1923,12 +1921,6 @@ ja:
warning_one: プロジェクトのメンバーは、プロジェクトのリポジトリを再配置する必要があります。
warning_two: プロジェクトへの既存のリンクは機能しなくなります。
title: プロジェクトの識別子を変更
template:
copying: >
Your project is being created from the selected template project. You will be notified by mail as soon as the project is available.
use_template: 'Use template'
make_template: 'Set as template'
remove_from_templates: 'Remove from templates'
archive:
are_you_sure: "プロジェクト '%{name}' をアーカイブしてもよろしいですか?"
archived: "Archived"

@ -412,7 +412,6 @@ ko:
types: "종류"
versions: "버전"
work_packages: "작업 패키지"
templated: 'Template project'
projects/status:
code: '상태'
explanation: '상태 설명'
@ -484,7 +483,6 @@ ko:
parent_work_package: "부모"
priority: "우선 순위"
progress: "진행률 (%)"
schedule_manually: "Schedule manually"
spent_hours: "소비한 시간"
spent_time: "소비한 시간"
subproject: "하위 프로젝트"
@ -1924,12 +1922,6 @@ ko:
warning_one: 프로젝트 멤버는 프로젝트의 리포지토리를 재배치해야 합니다.
warning_two: 프로젝트의 기존 링크는 더 이상 작동하지 않습니다.
title: 프로젝트의 식별자 변경
template:
copying: >
Your project is being created from the selected template project. You will be notified by mail as soon as the project is available.
use_template: 'Use template'
make_template: 'Set as template'
remove_from_templates: 'Remove from templates'
archive:
are_you_sure: "프로젝트 '%{name}'을(를) 보관하시겠습니까?"
archived: "보관됨"

@ -413,7 +413,6 @@ lt:
types: "Tipai"
versions: "Versijos"
work_packages: "Darbų paketai"
templated: 'Template project'
projects/status:
code: 'Būsena'
explanation: 'Būsenos aprašymas'
@ -485,7 +484,6 @@ lt:
parent_work_package: "Tėvas"
priority: "Pirmenybė"
progress: "Progresas (%)"
schedule_manually: "Schedule manually"
spent_hours: "Praleista laiko"
spent_time: "Praleista laiko"
subproject: "Sub-projektas"
@ -1985,12 +1983,6 @@ lt:
warning_one: Projekto nariai turės perkelti projekto saugyklas.
warning_two: Esamos nuorodos į projektą nebeveiks.
title: Pakeisti projekto identifikatorių
template:
copying: >
Your project is being created from the selected template project. You will be notified by mail as soon as the project is available.
use_template: 'Use template'
make_template: 'Set as template'
remove_from_templates: 'Remove from templates'
archive:
are_you_sure: "Ar Jūs tikrai norite suarchyvuoti projektą '%{name}'?"
archived: "Suarchyvuotas"

@ -414,7 +414,6 @@ nl:
types: "Typen"
versions: "Versies"
work_packages: "Werkpakketten"
templated: 'Template project'
projects/status:
code: 'Status'
explanation: 'Status description'
@ -486,7 +485,6 @@ nl:
parent_work_package: "Bovenliggend werkpakket"
priority: "Prioriteit"
progress: "Voortgang (%)"
schedule_manually: "Schedule manually"
spent_hours: "Bestede tijd"
spent_time: "Bestede tijd"
subproject: "Subproject"
@ -1945,12 +1943,6 @@ nl:
warning_one: Leden van het project zullen de opslagplaatsen van het project moeten verplaatsen.
warning_two: Bestaande koppelingen naar het project zullen niet langer werken.
title: Wijzig het identificatienummer van het project
template:
copying: >
Your project is being created from the selected template project. You will be notified by mail as soon as the project is available.
use_template: 'Use template'
make_template: 'Set as template'
remove_from_templates: 'Remove from templates'
archive:
are_you_sure: "Weet u zeker dat u dit project '%{name}' wilt archiveren?"
archived: "Archived"

@ -414,7 +414,6 @@
types: "Typer"
versions: "Versjoner"
work_packages: "Arbeidspakker"
templated: 'Template project'
projects/status:
code: 'Status'
explanation: 'Status description'
@ -486,7 +485,6 @@
parent_work_package: "Overordnet"
priority: "Prioritet"
progress: "Progress (%)"
schedule_manually: "Schedule manually"
spent_hours: "Tid brukt"
spent_time: "Tid brukt"
subproject: "Underprosjekt"
@ -1946,12 +1944,6 @@
warning_one: Members of the project will have to relocate the project's repositories.
warning_two: Existing links to the project will no longer work.
title: Change the project's identifier
template:
copying: >
Your project is being created from the selected template project. You will be notified by mail as soon as the project is available.
use_template: 'Use template'
make_template: 'Set as template'
remove_from_templates: 'Remove from templates'
archive:
are_you_sure: "Are you sure you want to archive the project '%{name}'?"
archived: "Archived"

@ -412,7 +412,6 @@ pl:
types: "Typy"
versions: "Wersje"
work_packages: "Zadania"
templated: 'Template project'
projects/status:
code: 'Status'
explanation: 'Opis statusu'
@ -484,7 +483,6 @@ pl:
parent_work_package: "Rodzic"
priority: "Priorytet"
progress: "Postęp (%)"
schedule_manually: "Schedule manually"
spent_hours: "Czas pracy"
spent_time: "Czas pracy"
subproject: "Podprojekt"
@ -1983,12 +1981,6 @@ pl:
warning_one: Członkowie projektu będą musieli przenieść repozytoria projektu.
warning_two: Istniejące linki do projektu nie będą dłużej działać.
title: Zmień identyfikator projektu
template:
copying: >
Your project is being created from the selected template project. You will be notified by mail as soon as the project is available.
use_template: 'Use template'
make_template: 'Set as template'
remove_from_templates: 'Remove from templates'
archive:
are_you_sure: "Jesteś pewien, że chcesz zarchiwizować projekt '%{name}'?"
archived: "Zarchiwizowano"

@ -412,7 +412,6 @@ pt-BR:
types: "Tipos"
versions: "Versões"
work_packages: "Pacotes de Trabalho"
templated: 'Template project'
projects/status:
code: 'Status'
explanation: 'Descrição do estado'
@ -484,7 +483,6 @@ pt-BR:
parent_work_package: "Pai"
priority: "Prioridade"
progress: "Progresso (%)"
schedule_manually: "Schedule manually"
spent_hours: "Tempo gasto"
spent_time: "Tempo gasto"
subproject: "Subprojeto"
@ -1944,12 +1942,6 @@ pt-BR:
warning_one: Membros do projeto terão que realocar os repositórios do projeto.
warning_two: Links existentes para o projeto deixarão de funcionar.
title: Alterar o identificador do projeto
template:
copying: >
Your project is being created from the selected template project. You will be notified by mail as soon as the project is available.
use_template: 'Use template'
make_template: 'Set as template'
remove_from_templates: 'Remove from templates'
archive:
are_you_sure: "Tem certeza de que deseja arquivar o projeto '%{name}'?"
archived: "Arquivado"

@ -412,7 +412,6 @@ pt:
types: "Tipos"
versions: "Versões"
work_packages: "Tarefas"
templated: 'Template project'
projects/status:
code: 'Situação'
explanation: 'Descrição do estado'
@ -484,7 +483,6 @@ pt:
parent_work_package: "Mãe"
priority: "Prioridade"
progress: "Progresso (%)"
schedule_manually: "Schedule manually"
spent_hours: "Tempo usado"
spent_time: "Tempo usado"
subproject: "Sub-projecto"
@ -1944,12 +1942,6 @@ pt:
warning_one: Os membros do projeto terão de realocar os repositórios do projeto.
warning_two: Os links existentes para o projeto já não funcionarão.
title: Alterar o identificador do projeto
template:
copying: >
Your project is being created from the selected template project. You will be notified by mail as soon as the project is available.
use_template: 'Use template'
make_template: 'Set as template'
remove_from_templates: 'Remove from templates'
archive:
are_you_sure: "Tem a certeza de que deseja arquivar o projeto '%{name}'?"
archived: "Arquivado"

@ -415,7 +415,6 @@ ro:
types: "Tipuri"
versions: "Versiuni"
work_packages: "Pachete de lucru"
templated: 'Template project'
projects/status:
code: 'Stare'
explanation: 'Status description'
@ -487,7 +486,6 @@ ro:
parent_work_package: "Părinte"
priority: "Prioritate"
progress: "Progres (%)"
schedule_manually: "Schedule manually"
spent_hours: "Timp consumat"
spent_time: "Timp consumat"
subproject: "Subproiect"
@ -1966,12 +1964,6 @@ ro:
warning_one: Participanții la proiect vor trebui să mute arhivele proiectului.
warning_two: Legăturile existente la acest proiect nu vor mai funcționa.
title: Modificare identificator proiect
template:
copying: >
Your project is being created from the selected template project. You will be notified by mail as soon as the project is available.
use_template: 'Use template'
make_template: 'Set as template'
remove_from_templates: 'Remove from templates'
archive:
are_you_sure: "Sunteţi sigur că doriţi să arhivaţi proiectul '%{name}'?"
archived: "Archived"

@ -415,7 +415,6 @@ ru:
types: "Типы"
versions: "Этапы"
work_packages: "Задачи"
templated: 'Template project'
projects/status:
code: 'Состояние'
explanation: 'Описание статуса'
@ -487,7 +486,6 @@ ru:
parent_work_package: "Родитель"
priority: "Приоритет"
progress: "Прогресс (%)"
schedule_manually: "Schedule manually"
spent_hours: "Затраченное время"
spent_time: "Затраченное время"
subproject: "Подпроект"
@ -1986,12 +1984,6 @@ ru:
warning_one: Участникам проекта нужно будет переместить репозитории проекта.
warning_two: Существующие ссылки на проект больше работать не будут.
title: Измените идентификатор проекта
template:
copying: >
Your project is being created from the selected template project. You will be notified by mail as soon as the project is available.
use_template: 'Use template'
make_template: 'Set as template'
remove_from_templates: 'Remove from templates'
archive:
are_you_sure: "Уверены, что хотите архивизировать проект %{name}%?"
archived: "Архивирован"

@ -416,7 +416,6 @@ sk:
types: "Typy"
versions: "Verzie"
work_packages: "Pracovné balíčky"
templated: 'Template project'
projects/status:
code: 'Stav'
explanation: 'Status description'
@ -488,7 +487,6 @@ sk:
parent_work_package: "Nadradený balíček"
priority: "Priorita"
progress: "Stav spracovania (%)"
schedule_manually: "Schedule manually"
spent_hours: "Strávený čas"
spent_time: "Strávený čas"
subproject: "Podprojekt"
@ -1987,12 +1985,6 @@ sk:
warning_one: Členovia projektu musia presunúť projektové archívy projektu.
warning_two: Existujúce prepojenia na projekt už nebudú fungovať.
title: Zmeniť identifikátor projektu
template:
copying: >
Your project is being created from the selected template project. You will be notified by mail as soon as the project is available.
use_template: 'Use template'
make_template: 'Set as template'
remove_from_templates: 'Remove from templates'
archive:
are_you_sure: "Naozaj chcete archivovať projekt \"%{name}\"?"
archived: "Archived"

@ -414,7 +414,6 @@ sl:
types: "Tipi"
versions: "Verzije"
work_packages: "zahtevki"
templated: 'Template project'
projects/status:
code: 'Stanje'
explanation: 'Opis stanja'
@ -486,7 +485,6 @@ sl:
parent_work_package: "Nadrejeni"
priority: "Prioriteta"
progress: "Napredek (%)"
schedule_manually: "Schedule manually"
spent_hours: "Porabljen čas"
spent_time: "Porabljen čas"
subproject: "Podprojekt"
@ -1986,12 +1984,6 @@ sl:
warning_one: Člani projekta bodo morali preseliti shrambo projekta.
warning_two: Obstoječe povezave do projekta ne bodo več delovale.
title: Spremenite identifikator projekta
template:
copying: >
Your project is being created from the selected template project. You will be notified by mail as soon as the project is available.
use_template: 'Use template'
make_template: 'Set as template'
remove_from_templates: 'Remove from templates'
archive:
are_you_sure: "Ali ste prepričani, da želite arhivirati projekt '% {name}'?"
archived: "Arhiviran"

@ -413,7 +413,6 @@ sv:
types: "Typer"
versions: "Versioner"
work_packages: "Arbetspaket"
templated: 'Template project'
projects/status:
code: 'Status'
explanation: 'Statusbeskrivning'
@ -485,7 +484,6 @@ sv:
parent_work_package: "Överordnad"
priority: "Prioritet"
progress: "Progress (%)"
schedule_manually: "Schedule manually"
spent_hours: "Förbrukad tid"
spent_time: "Förbrukad tid"
subproject: "Delprojekt"
@ -1945,12 +1943,6 @@ sv:
warning_one: Projektets medlemmar kommer att vara tvungna att flytta projektetdatabaserna.
warning_two: Befintliga länkar till projektet kommer inte att fungera längre.
title: Ändra projektets identifierare
template:
copying: >
Your project is being created from the selected template project. You will be notified by mail as soon as the project is available.
use_template: 'Use template'
make_template: 'Set as template'
remove_from_templates: 'Remove from templates'
archive:
are_you_sure: "Är du säker på att du vill arkivera projektet '%{name}'?"
archived: "Arkiverad"

@ -414,7 +414,6 @@ tr:
types: "Türler"
versions: "Sürümler"
work_packages: "İş Paketleri"
templated: 'Template project'
projects/status:
code: 'Durum'
explanation: 'Durum tanımlaması'
@ -486,7 +485,6 @@ tr:
parent_work_package: "Üst"
priority: "Öncelik"
progress: "İlerleme (%)"
schedule_manually: "Schedule manually"
spent_hours: "Harcanan zaman"
spent_time: "Harcanan zaman"
subproject: "Alt proje"
@ -1946,12 +1944,6 @@ tr:
warning_one: Projenin üyeleri, projenin depoları yeniden yerleştirmek zorunda kalacaklardır.
warning_two: Projeye mevcut bağlantılar artık çalışmayacaktır.
title: Projenin tanımlayıcısını değiştirme
template:
copying: >
Your project is being created from the selected template project. You will be notified by mail as soon as the project is available.
use_template: 'Use template'
make_template: 'Set as template'
remove_from_templates: 'Remove from templates'
archive:
are_you_sure: "'%{name}' projesini arşivlemek istediğinize emin misiniz?"
archived: "Arşivlenen"

@ -416,7 +416,6 @@ uk:
types: "Типи"
versions: "Версії"
work_packages: "Пакет робіт"
templated: 'Template project'
projects/status:
code: 'Статус'
explanation: 'Status description'
@ -488,7 +487,6 @@ uk:
parent_work_package: "Джерело"
priority: "Пріоритет"
progress: "Прогрес (%)"
schedule_manually: "Schedule manually"
spent_hours: "Трудовитрати"
spent_time: "Трудовитрати"
subproject: "Підпроект"
@ -1988,12 +1986,6 @@ uk:
warning_one: Членам проекту доведеться перенести репозиторії проекту.
warning_two: Існуючі посилання на проект більше не працюватимуть.
title: Змініть ідентифікатор проекту
template:
copying: >
Your project is being created from the selected template project. You will be notified by mail as soon as the project is available.
use_template: 'Use template'
make_template: 'Set as template'
remove_from_templates: 'Remove from templates'
archive:
are_you_sure: "Дійсно архівувати проект %{name} ?"
archived: "Archived"

@ -415,7 +415,6 @@ vi:
types: "Các loại"
versions: "Các phiên bản"
work_packages: "Work Packages"
templated: 'Template project'
projects/status:
code: 'Trạng thái'
explanation: 'Mô tả trạng thái'
@ -487,7 +486,6 @@ vi:
parent_work_package: "Cha"
priority: "Độ ưu tiên"
progress: "Progress (%)"
schedule_manually: "Schedule manually"
spent_hours: "Thời gian"
spent_time: "Thời gian"
subproject: "Dự án con"
@ -1927,12 +1925,6 @@ vi:
warning_one: Members of the project will have to relocate the project's repositories.
warning_two: Existing links to the project will no longer work.
title: Change the project's identifier
template:
copying: >
Your project is being created from the selected template project. You will be notified by mail as soon as the project is available.
use_template: 'Use template'
make_template: 'Set as template'
remove_from_templates: 'Remove from templates'
archive:
are_you_sure: "Bạn có chắc bạn muốn lưu trữ các dự án '%{name}'?"
archived: "Archived"

@ -408,7 +408,6 @@ zh-CN:
types: "类型"
versions: "版本"
work_packages: "工作包"
templated: 'Template project'
projects/status:
code: '状态'
explanation: '状态描述'
@ -480,7 +479,6 @@ zh-CN:
parent_work_package: "父"
priority: "优先级"
progress: "进度 (%)"
schedule_manually: "Schedule manually"
spent_hours: "已耗时间"
spent_time: "已耗时间"
subproject: "子项目"
@ -1919,12 +1917,6 @@ zh-CN:
warning_one: 项目的成员将重新迁移至项目的存储库。
warning_two: 该项目的现有链接将不再有效。
title: 更改项目的标识符
template:
copying: >
Your project is being created from the selected template project. You will be notified by mail as soon as the project is available.
use_template: 'Use template'
make_template: 'Set as template'
remove_from_templates: 'Remove from templates'
archive:
are_you_sure: "是否确定想要存档项目 '%{name}'?"
archived: "已存档"

@ -413,7 +413,6 @@ zh-TW:
types: "類型"
versions: "版本"
work_packages: "工作項目"
templated: 'Template project'
projects/status:
code: '狀態'
explanation: 'Status description'
@ -485,7 +484,6 @@ zh-TW:
parent_work_package: "上層目錄:"
priority: "優先等級"
progress: "進度 (%)"
schedule_manually: "Schedule manually"
spent_hours: "耗時"
spent_time: "耗時"
subproject: "子專案"
@ -1924,12 +1922,6 @@ zh-TW:
warning_one: 這個專案的成員將必須搬移專案的版本庫
warning_two: 專案現有的連結將不再有效
title: 修改專案的識別
template:
copying: >
Your project is being created from the selected template project. You will be notified by mail as soon as the project is available.
use_template: 'Use template'
make_template: 'Set as template'
remove_from_templates: 'Remove from templates'
archive:
are_you_sure: "是否確定要 archive 專案 '%{name}'?"
archived: "Archived"

@ -948,6 +948,9 @@ en:
has_children: "The work package has %{childUnits}:"
confirm_deletion_children: "I acknowledge that ALL descendants of the listed work packages will be recursively removed."
deletes_children: "All child work packages and their descendants will also be recursively deleted."
destroy_time_entry:
title: "Confirm deletion of time entry"
text: "Are you sure you want to delete the following time entry?"
notice_no_results_to_display: "No visible results to display."
notice_successful_create: "Successful creation."

BIN
docs/.DS_Store vendored

Binary file not shown.

@ -38,6 +38,8 @@ If a work package is then in the defined condition, the button will appear on to
![Sys-admin-custom-action-button](Sys-admin-custom-action-button.png)
![custom action](custom action demo copy.gif)
## Update, sort or delete custom actions
1. Click on the name of a custom action in order to update the attributes.

Binary file not shown.

After

Width:  |  Height:  |  Size: 683 KiB

@ -1,23 +1,33 @@
<div class="op-modal--portal confirm-form-submit--modal ngdialog-theme-openproject">
<div class="op-modal--portal confirm-form-submit--modal ngdialog-theme-openproject">
<div class="op-modal--modal-container confirm-dialog--modal loading-indicator--location"
[ngClass]="{'-highlight -danger-zone' : dangerHighlighting }"
data-indicator-name="modal"
tabindex="0">
<div class="op-modal--modal-header">
<a class="op-modal--modal-close-button" *ngIf="showClose">
<i
class="icon-close"
(click)="closeMe($event)"
[attr.title]="text.close_popup">
class="icon-close"
(click)="closeMe($event)"
[attr.title]="text.close_popup">
</i>
</a>
<h3 class="icon-context icon-attention" [textContent]="text.title"></h3>
</div>
<div class="ngdialog-body op-modal--modal-body">
<p [textContent]="text.text"></p>
<p>
<span [textContent]="text.text"></span>
<br/>
<span *ngFor="let data of passedData">
<br/>
<strong>{{data}}</strong>
</span>
</p>
</div>
<div class="op-modal--modal-footer">
<button class="confirm-form-submit--continue button -highlight"
<button class="confirm-form-submit--continue button"
[ngClass]="dangerHighlighting ? '-danger': '-highlight'"
(click)="confirmAndClose($event)"
[textContent]="text.button_continue"
[attr.title]="text.button_continue">
@ -27,7 +37,7 @@
[textContent]="text.button_cancel"
[attr.title]="text.button_cancel">
</button>
</div>
</div>
</div>

@ -1,8 +0,0 @@
.op-modal--modal-close-button
right: 1.75rem
top: 1.6rem
.op-modal--modal-container
padding-bottom: 0

@ -42,11 +42,12 @@ export interface ConfirmDialogOptions {
closeByEscape?:boolean;
showClose?:boolean;
closeByDocument?:boolean;
passedData?:string[];
dangerHighlighting?:boolean;
}
@Component({
templateUrl: './confirm-dialog.modal.html',
styleUrls:['./confirm-dialog.modal.sass']
templateUrl: './confirm-dialog.modal.html'
})
export class ConfirmDialogModal extends OpModalComponent {
@ -64,18 +65,23 @@ export class ConfirmDialogModal extends OpModalComponent {
close_popup: this.I18n.t('js.close_popup_title')
};
public passedData:string[];
public dangerHighlighting:boolean;
constructor(readonly elementRef:ElementRef,
@Inject(OpModalLocalsToken) public locals:OpModalLocalsMap,
readonly cdRef:ChangeDetectorRef,
readonly I18n:I18nService) {
super(locals, cdRef, elementRef);
this.options = locals.options || {};
this.dangerHighlighting = _.defaultTo(this.options.dangerHighlighting, false);
this.passedData = _.defaultTo(this.options.passedData, []);
this.closeOnEscape = _.defaultTo(this.options.closeByEscape, true);
this.closeOnOutsideClick = _.defaultTo(this.options.closeByDocument, true);
this.showClose = _.defaultTo(this.options.showClose, true);
// override default texts if any
this.text = _.defaults(this.options.text, this.text);
}

@ -1,92 +1,86 @@
<div class="op-modal--portal ">
<div class="op-modal--portal">
<div id="wp_destroy_modal"
class="op-modal--modal-container wp-table--configuration-modal loading-indicator--location"
class="op-modal--modal-container wp-table--configuration-modal loading-indicator--location -highlight -danger-zone"
data-indicator-name="modal"
tabindex="0">
<div class="op-modal--modal-header">
<a class="op-modal--modal-close-button">
<i
class="icon-close"
(click)="closeMe($event)"
[attr.title]="text.close">
<i class="icon-close"
(click)="closeMe($event)"
[attr.title]="text.close">
</i>
</a>
<h3 class="icon-context icon-attention" [textContent]="text.title"></h3>
</div>
<form name="modalWpDestroyForm" class="form danger-zone">
<section class="form--section -inner-scrolling">
<h3 class="form--section-title" [textContent]="text.title"></h3>
<div class="modal-inner-scrolling-container">
<ng-container *ngIf="singleWorkPackage">
<p>
<span [textContent]="text.text"></span>
<br/>
<strong>
{{ singleWorkPackage.type.name }}
#{{ singleWorkPackage.id }}
{{ singleWorkPackage.subject }}
</strong>
</p>
<div *ngIf="singleWorkPackageChildren && singleWorkPackageChildren.length > 0">
<p class="danger-zone--warning">
<span class="icon icon-error"></span>
<strong [textContent]="text.warning"></strong>:
<span [textContent]="text.hasChildren(singleWorkPackage)"></span>
</p>
<ul>
<li *ngFor="let child of singleWorkPackageChildren">
#<span [textContent]="child.id"></span>
<span [textContent]="child.subject || ''"></span>
</li>
</ul>
<p>
<span [textContent]="text.deletesChildren"></span>
</p>
</div>
</ng-container>
<ng-container *ngIf="workPackages.length > 1">
<div class="op-modal--modal-body">
<ng-container *ngIf="singleWorkPackage">
<p>
<span [textContent]="text.text"></span>
<br/>
<strong>
{{ singleWorkPackage.type.name }}
#{{ singleWorkPackage.id }}
{{ singleWorkPackage.subject }}
</strong>
</p>
<div *ngIf="singleWorkPackageChildren && singleWorkPackageChildren.length > 0">
<p class="danger-zone--warning">
<span class="icon icon-error"></span>
<strong [textContent]="text.text"></strong>
<span class="icon-context icon-error"></span>
<strong [textContent]="text.warning"></strong>:
<span [textContent]="text.hasChildren(singleWorkPackage)"></span>
</p>
<ul>
<li *ngFor="let wp of workPackages">
#<span [textContent]="wp.id"></span>
&ngsp;
<span [textContent]="wp.subject"></span>
<strong *ngIf="children(wp).length > 0">
(+ {{ text.childCount(wp) }})
</strong>
<li *ngFor="let child of singleWorkPackageChildren">
#<span [textContent]="child.id"></span>
<span [textContent]="child.subject || ''"></span>
</li>
</ul>
</ng-container>
<div *ngIf="mustConfirmChildren">
<label class="form--label-with-check-box">
<div class="form--check-box-container">
<input type="checkbox"
name="confirm-children-deletion"
id="confirm-children-deletion"
[(ngModel)]="childrenDeletionConfirmed"
class="form--check-box" />
</div>
{{ text.label_confirm_children_deletion }}
</label>
</div>
<p>
<span [textContent]="text.deletesChildren"></span>
</p>
</div>
</section>
<div class="form--space -left-spacing">
<button class="button -danger"
[textContent]="text.confirm"
[attr.disabled]="busy || blockedDueToUnconfirmedChildren || undefined"
(click)="confirmDeletion($event)">
</button>
<button class="button"
[textContent]="text.cancel"
(click)="closeMe($event)">
</button>
</ng-container>
<ng-container *ngIf="workPackages.length > 1">
<p class="danger-zone--warning">
<span class="icon-context icon-error"></span>
<strong [textContent]="text.text"></strong>
</p>
<ul>
<li *ngFor="let wp of workPackages">
#<span [textContent]="wp.id"></span>
&ngsp;
<span [textContent]="wp.subject"></span>
<strong *ngIf="children(wp).length > 0">
(+ {{ text.childCount(wp) }})
</strong>
</li>
</ul>
</ng-container>
<div *ngIf="mustConfirmChildren">
<label class="form--label-with-check-box">
<div class="form--check-box-container">
<input type="checkbox"
name="confirm-children-deletion"
id="confirm-children-deletion"
[(ngModel)]="childrenDeletionConfirmed"
class="form--check-box" />
</div>
{{ text.label_confirm_children_deletion }}
</label>
</div>
</form>
</div>
<div class="op-modal--modal-footer">
<button class="button -danger"
[textContent]="text.confirm"
[attr.disabled]="busy || blockedDueToUnconfirmedChildren || undefined"
(click)="confirmDeletion($event)">
</button>
<button class="button"
[textContent]="text.cancel"
(click)="closeMe($event)">
</button>
</div>
</div>
</div>

@ -152,7 +152,7 @@ export class HierarchyRenderPass extends PrimaryRenderPass {
// If the work package has deferred children to render,
// run them through the callback
deferredChildren.forEach((child:WorkPackageResource) => {
this.insertUnderParent(this.getOrBuildRow(child), child.parent);
this.insertUnderParent(this.getOrBuildRow(child), child.parent || workPackage);
// Descend into any children the child WP might have and callback
this.renderAllDeferredChildren(child);

@ -82,15 +82,14 @@ export class WorkPackageRelationsHierarchyComponent extends UntilDestroyedMixin
this.workPackage = wp;
let toLoad:string[] = [];
let parentId = this.workPackage.parent?.id?.toString();
if (this.workPackage.parent) {
toLoad.push(this.workPackage.parent.id.toString());
if (parentId) {
toLoad.push(parentId.toString());
this.wpCacheService.loadWorkPackage(this.workPackage.parent.id).values$()
.pipe(
take(1)
)
.subscribe((parent:WorkPackageResource) => {
this.wpCacheService
.require(parentId)
.then((parent:WorkPackageResource) => {
this.workPackage.parent = parent;
});
}

@ -135,7 +135,10 @@ export class WorkPackageRelationsHierarchyService {
},
lockVersion: childWorkPackage.lockVersion
}).then(wp => {
this.wpCacheService.loadWorkPackage(parentWorkPackage.id!, true);
if (parentWorkPackage) {
this.wpCacheService.require(parentWorkPackage.id!, true);
}
this.wpCacheService.updateWorkPackage(wp);
})
.catch((error) => {

@ -93,7 +93,7 @@ export class HierarchyDragActionService extends TableDragActionService {
private loadParentOfWP(wpId:string):Promise<string|null> {
return this.wpCacheService.require(wpId)
.then((wp:WorkPackageResource) => {
return Promise.resolve(wp.parent.id);
return Promise.resolve(wp.parent?.id || null);
});
}
}

@ -20,8 +20,8 @@ export abstract class WidgetTimeEntriesListComponent extends AbstractWidgetCompo
edit: this.i18n.t('js.button_edit'),
delete: this.i18n.t('js.button_delete'),
confirmDelete: {
text: this.i18n.t('js.text_are_you_sure'),
title: this.i18n.t('js.modals.form_submit.title')
text: this.i18n.t('js.modals.destroy_time_entry.text'),
title: this.i18n.t('js.modals.destroy_time_entry.title')
},
noResults: this.i18n.t('js.grid.widgets.time_entries_list.no_results'),
};
@ -115,12 +115,18 @@ export abstract class WidgetTimeEntriesListComponent extends AbstractWidgetCompo
public deleteIfConfirmed(event:Event, entry:TimeEntryResource) {
event.preventDefault();
this.confirmDialog.confirm({
text: this.text.confirmDelete,
closeByEscape: true,
showClose: true,
closeByDocument: true
closeByDocument: true,
passedData:[
'#' + entry.workPackage?.idFromLink + ' ' + entry.workPackage?.name,
this.i18n.t(
'js.units.hour',
{ count: this.timezone.toHours(entry.hours) }) + ' (' + entry.activity?.name + ')'
],
dangerHighlighting: true
}).then(() => {
entry.delete().then(() => {
let newEntries = this.entries.filter((anEntry) => {

@ -59,7 +59,7 @@ export interface WorkPackageResourceEmbedded {
availableWatchers:HalResource|any;
category:HalResource|any;
children:WorkPackageResource[];
parent:HalResource|any;
parent:WorkPackageResource|null;
priority:HalResource|any;
project:HalResource|any;
relations:CollectionResource;
@ -237,7 +237,7 @@ export class WorkPackageBaseResource extends HalResource {
}
public isParentOf(otherWorkPackage:WorkPackageResource) {
return otherWorkPackage.parent.$links.self.$link.href === this.$links.self.$link.href;
return otherWorkPackage.parent?.$links.self.$link.href === this.$links.self.$link.href;
}
/**

@ -3,7 +3,6 @@ import {InjectField} from "core-app/helpers/angular/inject-field.decorator";
import {TimeEntryEditService} from "core-app/modules/time_entries/edit/edit.service";
import {TimeEntryCacheService} from "core-components/time-entries/time-entry-cache.service";
import {I18nService} from "core-app/modules/common/i18n/i18n.service";
import {TimeEntryResource} from "core-app/modules/hal/resources/time-entry-resource";
import {TimeEntryDmService} from "core-app/modules/hal/dm-services/time-entry-dm.service";
import {NotificationsService} from "core-app/modules/common/notifications/notifications.service";
@ -12,14 +11,12 @@ export const triggerActionsEntryComponentSelector = 'time-entry--trigger-actions
@Component({
selector: triggerActionsEntryComponentSelector,
template: `
<a *ngIf="entry"
(click)="editTimeEntry(entry)"
<a (click)="editTimeEntry()"
[title]="text.edit"
class="no-decoration-on-hover">
<op-icon icon-classes="icon-context icon-edit"></op-icon>
</a>
<a *ngIf="entry"
(click)="deleteTimeEntry(entry)"
<a (click)="deleteTimeEntry()"
[title]="text.delete"
class="no-decoration-on-hover">
<op-icon icon-classes="icon-context icon-delete"></op-icon>
@ -27,7 +24,7 @@ export const triggerActionsEntryComponentSelector = 'time-entry--trigger-actions
`,
changeDetection: ChangeDetectionStrategy.OnPush,
})
export class TriggerActionsEntryComponent implements OnInit {
export class TriggerActionsEntryComponent {
@InjectField() readonly timeEntryEditService:TimeEntryEditService;
@InjectField() readonly timeEntryCache:TimeEntryCacheService;
@InjectField() readonly timeEntryDmService:TimeEntryDmService;
@ -36,8 +33,6 @@ export class TriggerActionsEntryComponent implements OnInit {
@InjectField() readonly i18n:I18nService;
@InjectField() readonly cdRef:ChangeDetectorRef;
public entry:TimeEntryResource;
public text = {
edit: this.i18n.t('js.button_edit'),
delete: this.i18n.t('js.button_delete'),
@ -46,42 +41,44 @@ export class TriggerActionsEntryComponent implements OnInit {
};
constructor(readonly injector:Injector) {
}
ngOnInit() {
let timeEntryId = this.elementRef.nativeElement.dataset['entry'];
this.timeEntryCache
.require(timeEntryId)
.then((loadedEntry) => {
this.entry = loadedEntry;
this.cdRef.detectChanges();
});
}
editTimeEntry(entry:TimeEntryResource) {
this.timeEntryEditService
.edit(entry)
.then(() => {
window.location.reload();
})
.catch(() => {
// User canceled the modal
editTimeEntry() {
this.loadEntry()
.then(entry => {
this.timeEntryEditService
.edit(entry)
.then(() => {
window.location.reload();
})
.catch(() => {
// User canceled the modal
});
});
}
deleteTimeEntry(entry:TimeEntryResource) {
deleteTimeEntry() {
if (!window.confirm(this.text.areYouSure)) {
return;
}
this.timeEntryDmService
.delete(entry)
.then(() => {
window.location.reload();
})
.catch((error) => {
this.notificationsService.addError(error || this.text.error);
this.loadEntry()
.then(entry => {
this.timeEntryDmService
.delete(entry)
.then(() => {
window.location.reload();
})
.catch((error) => {
this.notificationsService.addError(error || this.text.error);
});
});
}
protected loadEntry() {
let timeEntryId = this.elementRef.nativeElement.dataset['entry'];
return this.timeEntryCache
.require(timeEntryId);
}
}

@ -75,10 +75,10 @@ module OpenProject
strategy :saml do
OpenProject::AuthSaml.configuration.values.map do |h|
h[:openproject_attribute_map] = Proc.new do |auth|
{
login: auth[:uid],
admin: (auth.info['admin'].to_s.downcase == "true")
}
{}.tap do |additional|
additional[:login] = auth.info[:login] if auth.info.key? :login
additional[:admin] = auth.info[:admin] if auth.info.key? :admin
end
end
h.symbolize_keys
end

@ -1101,7 +1101,7 @@ en:
boards:
bcf:
name: "BCF issues"
bcf_xml_file: "seed.bcfzip"
bcf_xml_file: "seed.bcf"
work_packages:
- :start: 77
:bcf_issue_uuid: fbbf9ecf-5721-4bf1-a08c-aed50dc19353

@ -48,12 +48,12 @@ module OpenProject::Bim::BcfXml
# We often have an internal query name that is not meant
# for public use or was given by a user.
if query.name.present? && query.name != '_'
return sane_filename("#{query.name}.bcfzip")
return sane_filename("#{query.name}.bcf")
end
sane_filename(
"#{Setting.app_title} #{I18n.t(:label_work_package_plural)} \
#{format_time_as_date(Time.now, '%Y-%m-%d')}.bcfzip"
#{format_time_as_date(Time.now, '%Y-%m-%d')}.bcf"
)
end

@ -81,10 +81,10 @@ describe 'BCF XML API v1 bcf_xml resource', type: :request do
it 'responds with correct Content-Disposition' do
expect(subject.header["Content-Disposition"])
.to match(/attachment; filename="OpenProject_Work_packages_\d\d\d\d-\d\d-\d\d.bcfzip"/)
.to match(/attachment; filename="OpenProject_Work_packages_\d\d\d\d-\d\d-\d\d.bcf"/)
end
it 'responds with a correct .bcfzip file in the body ' do
it 'responds with a correct .bcf file in the body ' do
expect(zip_has_file?(subject.body, 'bcf.version')).to be_truthy
expect(zip_has_file?(subject.body, "#{bcf_issue.uuid}/markup.bcf")).to be_truthy
end
@ -112,7 +112,7 @@ describe 'BCF XML API v1 bcf_xml resource', type: :request do
get path
end
it 'excludes the work package from the .bcfzip file' do
it 'excludes the work package from the .bcf file' do
expect(zip_has_file?(subject.body, "#{bcf_issue.uuid}/markup.bcf")).to be_falsey
end
end

@ -1,5 +1,5 @@
vi:
dashboards:
label: 'Dashboards'
label: 'Bảng theo dõi'
menu_badge: 'Alpha'
project_module_dashboards: 'Dashboards'
project_module_dashboards: 'Bảng theo dõi'

@ -22,9 +22,8 @@
ar:
button_save_as: "حفظ التقرير بشكل..."
comments: "تعليق"
cost_reports_title: "Time and costs"
cost_reports_title: "تقارير التكلفة"
label_cost_report: "تقرير التكلفة"
label_cost_report_plural: "تقارير التكلفة"
description_drill_down: "أظهر التفاصيل"
description_filter_selection: "الاختيار"
description_multi_select: "أظهر الاختيار المتعدد"

@ -22,9 +22,8 @@
bg:
button_save_as: "Save report as..."
comments: "Коментар"
cost_reports_title: "Time and costs"
cost_reports_title: "Cost reports"
label_cost_report: "Cost report"
label_cost_report_plural: "Cost reports"
description_drill_down: "Show details"
description_filter_selection: "Selection"
description_multi_select: "Show multiselect"

@ -22,9 +22,8 @@
ca:
button_save_as: "Save report as..."
comments: "Comentari"
cost_reports_title: "Time and costs"
cost_reports_title: "Cost reports"
label_cost_report: "Cost report"
label_cost_report_plural: "Cost reports"
description_drill_down: "Mostra els detalls"
description_filter_selection: "Selection"
description_multi_select: "Show multiselect"

@ -22,9 +22,8 @@
cs:
button_save_as: "Uložit report jako..."
comments: "Komentář"
cost_reports_title: "Time and costs"
cost_reports_title: "Výkazy nákladů"
label_cost_report: "Výkaz nákladů"
label_cost_report_plural: "Výkazy nákladů"
description_drill_down: "Zobrazit detaily"
description_filter_selection: "Výběr"
description_multi_select: "Show multiselect"

@ -22,9 +22,8 @@
da:
button_save_as: "Gem rapport som..."
comments: "Kommentér"
cost_reports_title: "Time and costs"
cost_reports_title: "Omkostningsrapporter"
label_cost_report: "Omkostningsrapport"
label_cost_report_plural: "Omkostningsrapporter"
description_drill_down: "Vis detaljer"
description_filter_selection: "Markering"
description_multi_select: "Vis flere markeringer"

@ -22,9 +22,8 @@
de:
button_save_as: "Speichern unter ..."
comments: "Kommentar"
cost_reports_title: "Time and costs"
cost_reports_title: "Kostenauswertungen"
label_cost_report: "Report"
label_cost_report_plural: "Kostenauswertungen"
description_drill_down: "Details anzeigen"
description_filter_selection: "Auswahl"
description_multi_select: "Mehrfachauswahl anzeigen"

@ -22,9 +22,8 @@
el:
button_save_as: "Αποθήκευση αναφοράς ως..."
comments: "Σχόλιο"
cost_reports_title: "Time and costs"
cost_reports_title: "Αναφορές κόστους"
label_cost_report: "Αναφορά κόστους"
label_cost_report_plural: "Αναφορές κόστους"
description_drill_down: "Εμφάνιση λεπτομερειών"
description_filter_selection: "Επιλογή"
description_multi_select: "Εμφάνιση πολλαπλής επιλογής"

@ -22,9 +22,8 @@
es:
button_save_as: "Guardar informe como..."
comments: "Comentario"
cost_reports_title: "Time and costs"
cost_reports_title: "Reportes de costo"
label_cost_report: "Informe costo"
label_cost_report_plural: "Reportes de costo"
description_drill_down: "Ver detalles"
description_filter_selection: "Selección"
description_multi_select: "Mostrar selección múltiple"

@ -22,9 +22,8 @@
fi:
button_save_as: "Tallenna raportti nimellä..."
comments: "Kommentti"
cost_reports_title: "Time and costs"
cost_reports_title: "Kustannusraportit"
label_cost_report: "Kustannusraportti"
label_cost_report_plural: "Kustannusraportit"
description_drill_down: "Näytä tiedot"
description_filter_selection: "Valinta"
description_multi_select: "Näytä monivalinta"

@ -22,9 +22,8 @@
fil:
button_save_as: "Save report as..."
comments: "Komento"
cost_reports_title: "Time and costs"
cost_reports_title: "Cost reports"
label_cost_report: "Cost report"
label_cost_report_plural: "Cost reports"
description_drill_down: "Show details"
description_filter_selection: "Selection"
description_multi_select: "Show multiselect"

@ -22,9 +22,8 @@
fr:
button_save_as: "Enregistrer le rapport sous…"
comments: "Commentaire"
cost_reports_title: "Time and costs"
cost_reports_title: "Rapports de coût"
label_cost_report: "Rapport de coût"
label_cost_report_plural: "Rapports de coût"
description_drill_down: "Afficher les détails"
description_filter_selection: "Sélection"
description_multi_select: "Voir la sélection multiple"

@ -22,9 +22,8 @@
hr:
button_save_as: "Spremi izvješće kao..."
comments: "Komentar"
cost_reports_title: "Time and costs"
cost_reports_title: "Izvješća troškova"
label_cost_report: "Izvješće troška"
label_cost_report_plural: "Izvješća troškova"
description_drill_down: "Prikaži detalje"
description_filter_selection: "Izbor"
description_multi_select: "Prikaži višeodabir"

@ -22,9 +22,8 @@
hu:
button_save_as: "Mentés másként..."
comments: "Vélemény"
cost_reports_title: "Time and costs"
cost_reports_title: "Költség jelentések"
label_cost_report: "Költség jelentés"
label_cost_report_plural: "Költség jelentések"
description_drill_down: "Részletek megjelenítése"
description_filter_selection: "Kijelölés"
description_multi_select: "Több kiválasztása"

@ -22,9 +22,8 @@
id:
button_save_as: "Simpan sebagai..."
comments: "Komentar"
cost_reports_title: "Time and costs"
cost_reports_title: "Pelaporan biaya"
label_cost_report: "Laporan biaya"
label_cost_report_plural: "Pelaporan biaya"
description_drill_down: "Lihat detail"
description_filter_selection: "Seleksi"
description_multi_select: "Tampilkan multiselect"

@ -22,9 +22,8 @@
it:
button_save_as: "Salvare il report come..."
comments: "Commento"
cost_reports_title: "Time and costs"
cost_reports_title: "Report costi"
label_cost_report: "Relazione sui costi"
label_cost_report_plural: "Report costi"
description_drill_down: "Mostra dettagli"
description_filter_selection: "Selezione"
description_multi_select: "Visualizza multiselect"

@ -22,9 +22,8 @@
ja:
button_save_as: "名前を付けてレポートの保存"
comments: "コメント"
cost_reports_title: "Time and costs"
cost_reports_title: "コストレポート"
label_cost_report: "コストレポート"
label_cost_report_plural: "コストレポート"
description_drill_down: "詳細を表示"
description_filter_selection: "選択"
description_multi_select: "複数選択"

@ -22,9 +22,8 @@
ko:
button_save_as: "다른 이름으로 보고서로 저장..."
comments: "코멘트"
cost_reports_title: "Time and costs"
cost_reports_title: "비용 보고서"
label_cost_report: "비용 보고서"
label_cost_report_plural: "비용 보고서"
description_drill_down: "세부 정보 표시"
description_filter_selection: "선택"
description_multi_select: "다중 선택 표시"

@ -22,9 +22,8 @@
lt:
button_save_as: "Įrašyti ataskaitą kaip..."
comments: "Komentaras"
cost_reports_title: "Time and costs"
cost_reports_title: "Kaštų ataskaitos"
label_cost_report: "Kaštų ataskaita"
label_cost_report_plural: "Kaštų ataskaitos"
description_drill_down: "Rodyti Išsamią informaciją"
description_filter_selection: "Pasirinkimas"
description_multi_select: "Rodyti multipasirinkimą"

@ -22,9 +22,8 @@
nl:
button_save_as: "Rapport opslaan als..."
comments: "Commentaar"
cost_reports_title: "Time and costs"
cost_reports_title: "Kostenrapporten"
label_cost_report: "Kostenrapport"
label_cost_report_plural: "Kostenrapporten"
description_drill_down: "Details weergeven"
description_filter_selection: "Selectie"
description_multi_select: "Bekijk de meervoudige selectie"

@ -22,9 +22,8 @@
"no":
button_save_as: "Save report as..."
comments: "Kommentar"
cost_reports_title: "Time and costs"
cost_reports_title: "Cost reports"
label_cost_report: "Cost report"
label_cost_report_plural: "Cost reports"
description_drill_down: "Vis detaljer"
description_filter_selection: "Selection"
description_multi_select: "Show multiselect"

@ -22,9 +22,8 @@
pl:
button_save_as: "Zapisz raport jako..."
comments: "Komentarz"
cost_reports_title: "Time and costs"
cost_reports_title: "Raporty kosztów"
label_cost_report: "Raport kosztów"
label_cost_report_plural: "Raporty kosztów"
description_drill_down: "Pokaż szczegóły"
description_filter_selection: "Wybór"
description_multi_select: "Pokaż multiselect"

@ -22,9 +22,8 @@
pt-BR:
button_save_as: "Salvar relatório como..."
comments: "Comentário"
cost_reports_title: "Time and costs"
cost_reports_title: "Relatórios de custos"
label_cost_report: "Relatório de custos"
label_cost_report_plural: "Relatórios de custos"
description_drill_down: "Exibir detalhes"
description_filter_selection: "Seleção"
description_multi_select: "Mostrar multiseleção"

@ -22,9 +22,8 @@
pt:
button_save_as: "Guardar relatório como..."
comments: "Comentario"
cost_reports_title: "Time and costs"
cost_reports_title: "Relatórios de custos"
label_cost_report: "Relatório de custo"
label_cost_report_plural: "Relatórios de custos"
description_drill_down: "Mostrar detalhes"
description_filter_selection: "Seleção"
description_multi_select: "Mostrar multiseleção"

@ -22,9 +22,8 @@
ro:
button_save_as: "Salvare raport ca..."
comments: "Comentariu"
cost_reports_title: "Time and costs"
cost_reports_title: "Rapoarte de cost"
label_cost_report: "Raport de cost"
label_cost_report_plural: "Rapoarte de cost"
description_drill_down: "Afișare detalii"
description_filter_selection: "Selecție"
description_multi_select: "Afișare selecție multiplă"

@ -22,9 +22,8 @@
ru:
button_save_as: "Сохранить отчет как..."
comments: "Комментарий"
cost_reports_title: "Time and costs"
cost_reports_title: "Стоимость отчетов"
label_cost_report: "Отчет по расходам"
label_cost_report_plural: "Стоимость отчетов"
description_drill_down: "Показать в деталях"
description_filter_selection: "Выбор"
description_multi_select: "Показать множественный выбор"

@ -22,9 +22,8 @@
sk:
button_save_as: "Uložiť prehľad ako..."
comments: "Komentár"
cost_reports_title: "Time and costs"
cost_reports_title: "Výkazy nákladov"
label_cost_report: "Výkaz nákladov"
label_cost_report_plural: "Výkazy nákladov"
description_drill_down: "Zobraziť Podrobnosti"
description_filter_selection: "Výber"
description_multi_select: "Zobraziť multiselect"

@ -22,9 +22,8 @@
sl:
button_save_as: "Shrani poročilo kot..."
comments: "Komentar"
cost_reports_title: "Time and costs"
cost_reports_title: "Poročilo o stroških"
label_cost_report: "Poročilo o stroških"
label_cost_report_plural: "Poročilo o stroških"
description_drill_down: "Pokaži podrobnosti"
description_filter_selection: "Izbor"
description_multi_select: "Prikaži večselektor"

@ -22,9 +22,8 @@
sv:
button_save_as: "Spara rapporten som..."
comments: "Kommentar"
cost_reports_title: "Time and costs"
cost_reports_title: "Kostnadsrapporter"
label_cost_report: "Kostnadsrapport"
label_cost_report_plural: "Kostnadsrapporter"
description_drill_down: "Visa detaljer"
description_filter_selection: "Urval"
description_multi_select: "Visa flerval"

@ -22,9 +22,8 @@
tr:
button_save_as: "Raporu... şeklinde kaydet"
comments: "Yorum"
cost_reports_title: "Time and costs"
cost_reports_title: "Maliyet raporları"
label_cost_report: "Maliyet raporu"
label_cost_report_plural: "Maliyet raporları"
description_drill_down: "Ayrıntıları görüntüle"
description_filter_selection: "Seçim"
description_multi_select: "Çoklu görüntüle"

@ -22,9 +22,8 @@
uk:
button_save_as: "Зберегти звіт до:"
comments: "Коментар"
cost_reports_title: "Time and costs"
cost_reports_title: "Звіти про витрати"
label_cost_report: "Звіт про витрати"
label_cost_report_plural: "Звіти про витрати"
description_drill_down: "Детальніше"
description_filter_selection: "Вибір"
description_multi_select: "Показати багатозначний вибір"

@ -22,9 +22,8 @@
vi:
button_save_as: "Save report as..."
comments: "Nhận xét"
cost_reports_title: "Time and costs"
cost_reports_title: "Cost reports"
label_cost_report: "Cost report"
label_cost_report_plural: "Cost reports"
description_drill_down: "Show details"
description_filter_selection: "Selection"
description_multi_select: "Show multiselect"

@ -22,9 +22,8 @@
zh-CN:
button_save_as: "报告另存为..."
comments: "评论"
cost_reports_title: "Time and costs"
cost_reports_title: "成本报告"
label_cost_report: "成本报告"
label_cost_report_plural: "成本报告"
description_drill_down: "显示详情"
description_filter_selection: "选择"
description_multi_select: "显示多选"

@ -22,9 +22,8 @@
zh-TW:
button_save_as: "將報表另存為..。"
comments: "評論"
cost_reports_title: "Time and costs"
cost_reports_title: "成本報告"
label_cost_report: "成本報告"
label_cost_report_plural: "成本報告"
description_drill_down: "顯示詳細資訊"
description_filter_selection: "選擇"
description_multi_select: "顯示多選"

@ -176,6 +176,10 @@ describe 'Wysiwyg tables',
expect(editable).to have_selector('td[style*="background-color:#123456"]')
expect(editable).to have_selector('td[style*="text-align:center"]')
expect(editable).to have_selector('td[style*="vertical-align:top"]')
# Expect word-break not to be set to cell that does not have width
value2 = page.evaluate_script('getComputedStyle(arguments[0]).wordBreak', editable.all('.table.ck-widget td').first)
expect(value2).to eq('normal')
end
# Save wiki page
@ -263,6 +267,74 @@ describe 'Wysiwyg tables',
expect(editable).to have_selector('table[style*="border-top:10px dotted"]')
end
end
it 'can restrict table cell width' do
editor.in_editor do |container, editable|
# strangely, we need visible: :all here
editor.click_toolbar_button 'Insert table'
# 2x2
container.find('.ck-insert-table-dropdown-grid-box:nth-of-type(12)').click
# Edit table
tds = editable.all('.table.ck-widget td')
values = %w(h1 h2 a)
expect(tds.length).to eq(4)
tds.take(3).each_with_index do |td, i|
td.click
td.send_keys values[i]
sleep 0.5
end
# style first td
tds.first.click
# Click row toolbar
editor.click_hover_toolbar_button 'Cell properties'
# Enable header row
find('.ck-table-form__dimensions-row__width input').set '250px'
find('.ck-button-save').click
expect(editable).to have_selector('td[style*="width:250px"]')
# Expect break-all to be applied to this input
value = page.evaluate_script('getComputedStyle(arguments[0]).wordBreak', editable.all('.table.ck-widget td')[0])
expect(value).to eq('break-all')
# Expect not to be set to cell that does not have width
value2 = page.evaluate_script('getComputedStyle(arguments[0]).wordBreak', editable.all('.table.ck-widget td')[1])
expect(value2).to eq('normal')
end
# Save wiki page
click_on 'Save'
expect(page).to have_selector('.flash.notice')
within('#content') do
expect(page).to have_selector('td[style*="width:250px"]')
# Expect not to be set to cell that does not have width
value2 = page.evaluate_script('getComputedStyle(arguments[0]).wordBreak', page.find('td[style*="width:250px"]'))
expect(value2).to eq('break-all')
end
# Edit again
click_on 'Edit'
editor.in_editor do |container, editable|
expect(editable).to have_selector('td[style*="width:250px"]')
# Expect break-all to be applied to this input
value = page.evaluate_script('getComputedStyle(arguments[0]).wordBreak', editable.all('.table.ck-widget td')[0])
expect(value).to eq('break-all')
# Expect not to be set to cell that does not have width
value2 = page.evaluate_script('getComputedStyle(arguments[0]).wordBreak', editable.all('.table.ck-widget td')[1])
expect(value2).to eq('normal')
end
end
end
describe 'editing a wiki page with tables' do

Loading…
Cancel
Save