additional_tags 1.0.6 → 1.0.7
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github/workflows/codeql-analysis.yml +6 -6
- data/.github/workflows/linters.yml +15 -3
- data/.github/workflows/tests.yml +7 -4
- data/.gitignore +2 -0
- data/.rubocop.yml +5 -0
- data/.stylelintrc.json +12 -155
- data/README.md +26 -7
- data/app/controllers/additional_tags_controller.rb +9 -9
- data/app/controllers/issue_tags_controller.rb +3 -1
- data/app/helpers/additional_tags_helper.rb +39 -30
- data/app/helpers/additional_tags_issues_helper.rb +1 -3
- data/app/helpers/additional_tags_wiki_helper.rb +6 -5
- data/app/models/additional_tag.rb +98 -0
- data/app/views/additional_tags/_tag_list.html.slim +10 -4
- data/app/views/additional_tags/merge.html.slim +0 -1
- data/app/views/additional_tags/settings/_general.html.slim +7 -1
- data/app/views/additional_tags/settings/_manage_tags.html.slim +8 -1
- data/app/views/context_menus/_issues_tags.html.slim +7 -1
- data/app/views/dashboards/blocks/_issue_tags.html.slim +3 -1
- data/app/views/issue_tags/_edit_modal.html.slim +7 -7
- data/app/views/issues/_tags.html.slim +6 -1
- data/app/views/issues/_tags_bulk_edit.html.slim +2 -1
- data/app/views/wiki/_tags_form.html.slim +4 -0
- data/app/views/wiki/_tags_show.html.slim +1 -1
- data/assets/javascripts/tags.js +3 -3
- data/assets/stylesheets/tags.css +41 -16
- data/config/locales/bg.yml +18 -11
- data/config/locales/cs.yml +19 -12
- data/config/locales/de.yml +19 -12
- data/config/locales/en.yml +19 -12
- data/config/locales/es.yml +19 -12
- data/config/locales/fr.yml +19 -12
- data/config/locales/it.yml +19 -12
- data/config/locales/ja.yml +18 -11
- data/config/locales/ko.yml +18 -11
- data/config/locales/pl.yml +19 -12
- data/config/locales/pt-BR.yml +18 -11
- data/config/locales/ru.yml +34 -27
- data/config/settings.yml +5 -5
- data/doc/images/additional-tags-framework.png +0 -0
- data/doc/images/additional-tags.gif +0 -0
- data/doc/images/tag-overview.png +0 -0
- data/lib/additional_tags/hooks/view_hook.rb +15 -2
- data/lib/additional_tags/patches/issue_patch.rb +53 -7
- data/lib/additional_tags/patches/issue_query_patch.rb +18 -0
- data/lib/additional_tags/patches/queries_helper_patch.rb +1 -3
- data/lib/additional_tags/patches/query_patch.rb +22 -1
- data/lib/additional_tags/patches/wiki_page_patch.rb +6 -1
- data/lib/additional_tags/plugin_version.rb +1 -1
- data/lib/additional_tags/tags.rb +34 -12
- data/lib/additional_tags.rb +5 -0
- data/package.json +8 -0
- metadata +6 -3
data/config/locales/fr.yml
CHANGED
@@ -1,38 +1,45 @@
|
|
1
1
|
fr:
|
2
|
+
activerecord:
|
3
|
+
errors:
|
4
|
+
messages:
|
5
|
+
invalid_mutually_exclusive_tags: "utilise des étiquettes mutuellement exclusives"
|
6
|
+
field_issue_tags: "Demande tags"
|
2
7
|
field_tag_list: Tags
|
3
8
|
field_tags: Tags
|
4
|
-
field_issue_tags: "Demande tags"
|
5
9
|
label_active_issue_tags: "Activer les tags demandes"
|
6
10
|
label_active_wiki_tags: "Activer les tags wiki"
|
7
11
|
label_add_tags: "Gérer les tags"
|
12
|
+
label_amount_entities_with_tags: "Montant %{name} avec tags"
|
13
|
+
label_amount_tags: "Montant tags"
|
8
14
|
label_edit_tags: "Modifier les tags"
|
9
15
|
label_manage_tags: "Gérer les tags"
|
10
16
|
label_merge_selected_tags: "Fusionner les tags sélectionnées"
|
11
17
|
label_open_issues_only: "Afficher uniquement les demandes ouverts"
|
18
|
+
label_quantity: "Quantité"
|
12
19
|
label_show_with_count: "Afficher le montant sur l'tags"
|
20
|
+
label_tag_color_theme: "Thème de la couleur %{value}"
|
21
|
+
label_tags_colors: "Couleur"
|
22
|
+
label_tags_sidebar: "Afficher les tags sur la barre latérale comme"
|
23
|
+
label_tags_sort_by: "Trier les balises par"
|
24
|
+
label_tags_suggestion_order: "Ordre de suggestion"
|
13
25
|
label_tags_tag: "Tag"
|
14
|
-
|
15
|
-
|
26
|
+
label_tags_without_color: "Sans couleur"
|
27
|
+
label_use_colors: "Utiliser des couleurs"
|
28
|
+
label_wiki_index_for_tag: "Pages wiki avec la tags"
|
29
|
+
label_with_chart: "Avec tableau"
|
30
|
+
label_with_table_of_values: "Avec tableau de valeur"
|
16
31
|
notice_failed_to_add_tags: "Omission d'ajouter des tags"
|
17
32
|
notice_tags_added: "Tags ajoutés"
|
18
33
|
permission_add_wiki_tags: "Ajouter des tags wiki"
|
19
34
|
permission_create_issue_tags: "Ajouter des tags de demandes"
|
20
35
|
permission_edit_issue_tags: "Éditer les tags de demandes"
|
21
36
|
permission_view_issue_tags: "Afficher les tags des demandes"
|
22
|
-
tags_order_by_last_created: "Dernière création"
|
23
37
|
tags_order_by_count: "Les plus utilisés"
|
38
|
+
tags_order_by_last_created: "Dernière création"
|
24
39
|
tags_order_by_name: "Nom"
|
25
40
|
tags_sidebar_cloud: "Cloud"
|
26
41
|
tags_sidebar_list: "Liste"
|
27
42
|
tags_sidebar_none: "Aucune"
|
28
43
|
tags_sidebar_simple_cloud: "Simple cloud"
|
29
|
-
label_tags_sidebar: "Afficher les tags sur la barre latérale comme"
|
30
44
|
tags_sort_by_count: "Compter"
|
31
45
|
tags_sort_by_name: "Nom"
|
32
|
-
label_tags_sort_by: "Trier les balises par"
|
33
|
-
label_tags_suggestion_order: "Ordre de suggestion"
|
34
|
-
label_with_table_of_values: "Avec tableau de valeur"
|
35
|
-
label_with_chart: "Avec tableau"
|
36
|
-
label_amount_tags: "Montant tags"
|
37
|
-
label_amount_entities_with_tags: "Montant %{name} avec tags"
|
38
|
-
label_quantity: "Quantité"
|
data/config/locales/it.yml
CHANGED
@@ -1,38 +1,45 @@
|
|
1
1
|
it:
|
2
|
+
activerecord:
|
3
|
+
errors:
|
4
|
+
messages:
|
5
|
+
invalid_mutually_exclusive_tags: "utilizza tag mutuamente esclusivi"
|
6
|
+
field_issue_tags: "Segnalazione tags"
|
2
7
|
field_tag_list: Tags
|
3
8
|
field_tags: Tags
|
4
|
-
field_issue_tags: "Segnalazione tags"
|
5
9
|
label_active_issue_tags: "Attivare i tag di segnalazione"
|
6
10
|
label_active_wiki_tags: "Attivare i tag wiki"
|
7
11
|
label_add_tags: "Aggiungi tag"
|
12
|
+
label_amount_entities_with_tags: Amount %{name} with tags
|
13
|
+
label_amount_tags: Amount tags
|
8
14
|
label_edit_tags: "Modifica i tag"
|
9
15
|
label_manage_tags: "Gestire i tag"
|
10
16
|
label_merge_selected_tags: "Unisci i tag selezionati"
|
11
17
|
label_open_issues_only: "Mostra solo i segnalazione"
|
18
|
+
label_quantity: "Numero"
|
12
19
|
label_show_with_count: "Visualizzare l'importo sul tag"
|
20
|
+
label_tag_color_theme: "Tema colore %{value}"
|
21
|
+
label_tags_colors: Colore
|
22
|
+
label_tags_sidebar: "Visualizzare i tag sulla barra laterale come"
|
23
|
+
label_tags_sort_by: "Ordina i tag per"
|
24
|
+
label_tags_suggestion_order: "Ordine di suggerimento"
|
13
25
|
label_tags_tag: "Tag"
|
14
|
-
|
15
|
-
|
26
|
+
label_tags_without_color: "Senza colore"
|
27
|
+
label_use_colors: "Usa i colori"
|
28
|
+
label_wiki_index_for_tag: "Pagine Wiki con tag"
|
29
|
+
label_with_chart: "Con grafico"
|
30
|
+
label_with_table_of_values: "Con tabella di valori"
|
16
31
|
notice_failed_to_add_tags: "Non è stato possibile aggiungere tag"
|
17
32
|
notice_tags_added: "Tag aggiunti"
|
18
33
|
permission_add_wiki_tags: "Aggiungi tag wiki"
|
19
34
|
permission_create_issue_tags: "Aggiungi i tag di segnalazione"
|
20
35
|
permission_edit_issue_tags: "Modifica i tag di segnalazione"
|
21
36
|
permission_view_issue_tags: "Visualizzare i tag di segnalazione"
|
22
|
-
tags_order_by_last_created: "Ultima creazione"
|
23
37
|
tags_order_by_count: "I più usati"
|
38
|
+
tags_order_by_last_created: "Ultima creazione"
|
24
39
|
tags_order_by_name: "Nome"
|
25
40
|
tags_sidebar_cloud: "Cloud"
|
26
41
|
tags_sidebar_list: "Elenco"
|
27
42
|
tags_sidebar_none: "Nessuno"
|
28
43
|
tags_sidebar_simple_cloud: "Simple cloud"
|
29
|
-
label_tags_sidebar: "Visualizzare i tag sulla barra laterale come"
|
30
44
|
tags_sort_by_count: "Contate"
|
31
45
|
tags_sort_by_name: "Nome"
|
32
|
-
label_tags_sort_by: "Ordina i tag per"
|
33
|
-
label_tags_suggestion_order: "Ordine di suggerimento"
|
34
|
-
label_with_table_of_values: With table of values
|
35
|
-
label_with_chart: With chart
|
36
|
-
label_amount_tags: Amount tags
|
37
|
-
label_amount_entities_with_tags: Amount %{name} with tags
|
38
|
-
label_quantity: "Numero"
|
data/config/locales/ja.yml
CHANGED
@@ -1,38 +1,45 @@
|
|
1
1
|
ja:
|
2
|
+
activerecord:
|
3
|
+
errors:
|
4
|
+
messages:
|
5
|
+
invalid_mutually_exclusive_tags: "は相互に排他的なタグを使用しています。"
|
6
|
+
field_issue_tags: "発行タグ"
|
2
7
|
field_tag_list: Tags
|
3
8
|
field_tags: Tags
|
4
|
-
field_issue_tags: Issue tags
|
5
9
|
label_active_issue_tags: "課題タグを有効にする"
|
6
10
|
label_active_wiki_tags: "wikiのタグを有効にする"
|
7
11
|
label_add_tags: "タグを追加"
|
12
|
+
label_amount_entities_with_tags: "金額 %{name} tags付き"
|
13
|
+
label_amount_tags: "金額 tags"
|
8
14
|
label_edit_tags: "タグの編集"
|
9
15
|
label_manage_tags: "タグの管理"
|
10
16
|
label_merge_selected_tags: "選択したタグをマージ"
|
11
17
|
label_open_issues_only: "開いている問題のみを表示"
|
18
|
+
label_quantity: "数量"
|
12
19
|
label_show_with_count: "タグに金額を表示"
|
20
|
+
label_tag_color_theme: "カラーテーマ%{value}"
|
21
|
+
label_tags_colors: "カラー"
|
22
|
+
label_tags_sidebar: "サイドバーにタグを"
|
23
|
+
label_tags_sort_by: "タグを並べ替える"
|
24
|
+
label_tags_suggestion_order: "ご提案の順番"
|
13
25
|
label_tags_tag: "Tag"
|
26
|
+
label_tags_without_color: "色なし"
|
14
27
|
label_use_colors: "色を使う"
|
15
|
-
|
28
|
+
label_wiki_index_for_tag: "タグが付いているウィキのページ"
|
29
|
+
label_with_chart: "チャート付き"
|
30
|
+
label_with_table_of_values: "価値観のテーブル付き"
|
16
31
|
notice_failed_to_add_tags: "タグの追加に失敗"
|
17
32
|
notice_tags_added: "追加されたタグ"
|
18
33
|
permission_add_wiki_tags: "wikiタグの追加"
|
19
34
|
permission_create_issue_tags: "課題タグの追加"
|
20
35
|
permission_edit_issue_tags: "課題タグの編集"
|
21
36
|
permission_view_issue_tags: "課題タグの表示"
|
22
|
-
tags_order_by_last_created: "最後に作成された"
|
23
37
|
tags_order_by_count: "最も使用されている"
|
38
|
+
tags_order_by_last_created: "最後に作成された"
|
24
39
|
tags_order_by_name: "名前"
|
25
40
|
tags_sidebar_cloud: "クラウド"
|
26
41
|
tags_sidebar_list: "リスト"
|
27
42
|
tags_sidebar_none: "なし"
|
28
43
|
tags_sidebar_simple_cloud: "シンプルなクラウド"
|
29
|
-
label_tags_sidebar: "サイドバーにタグを"
|
30
44
|
tags_sort_by_count: "伯爵"
|
31
45
|
tags_sort_by_name: "名前"
|
32
|
-
label_tags_sort_by: "タグを並べ替える"
|
33
|
-
label_tags_suggestion_order: "ご提案の順番"
|
34
|
-
label_with_table_of_values: "価値観のテーブル付き"
|
35
|
-
label_with_chart: "チャート付き"
|
36
|
-
label_amount_tags: "金額 tags"
|
37
|
-
label_amount_entities_with_tags: "金額 %{name} tags付き"
|
38
|
-
label_quantity: "数量"
|
data/config/locales/ko.yml
CHANGED
@@ -1,38 +1,45 @@
|
|
1
1
|
ko:
|
2
|
+
activerecord:
|
3
|
+
errors:
|
4
|
+
messages:
|
5
|
+
invalid_mutually_exclusive_tags: "상호 배타적인 태그 사용"
|
6
|
+
field_issue_tags: Issue tags
|
2
7
|
field_tag_list: Tags
|
3
8
|
field_tags: Tags
|
4
|
-
field_issue_tags: Issue tags
|
5
9
|
label_active_issue_tags: "이슈 태그 활성화"
|
6
10
|
label_active_wiki_tags: "Wiki 태그 활성화"
|
7
11
|
label_add_tags: "태그 추가"
|
12
|
+
label_amount_entities_with_tags: "TAG가 있는 금액 %{name}"
|
13
|
+
label_amount_tags: "금액 태그"
|
8
14
|
label_edit_tags: "태그 편집"
|
9
15
|
label_manage_tags: "태그 관리"
|
10
16
|
label_merge_selected_tags: "선택한 태그 병합"
|
11
17
|
label_open_issues_only: "미해결 문제 만 표시"
|
18
|
+
label_quantity: "수량"
|
12
19
|
label_show_with_count: "태그에 금액 표시"
|
20
|
+
label_tag_color_theme: "색상 테마 %{value}"
|
21
|
+
label_tags_colors: "색깔"
|
22
|
+
label_tags_sidebar: "사이드 바에 태그 표시"
|
23
|
+
label_tags_sort_by: "태그 정렬 기준"
|
24
|
+
label_tags_suggestion_order: "제안 순서"
|
13
25
|
label_tags_tag: "Tag"
|
26
|
+
label_tags_without_color: "무색"
|
14
27
|
label_use_colors: "색상 사용"
|
15
|
-
|
28
|
+
label_wiki_index_for_tag: "태그가있는 위키 페이지"
|
29
|
+
label_with_chart: "차트 포함"
|
30
|
+
label_with_table_of_values: "가치 테이블"
|
16
31
|
notice_failed_to_add_tags: "태그를 추가하지 못했습니다."
|
17
32
|
notice_tags_added: "추가 된 태그"
|
18
33
|
permission_add_wiki_tags: "위키 태그 추가"
|
19
34
|
permission_create_issue_tags: "문제 태그 추가"
|
20
35
|
permission_edit_issue_tags: "이슈 태그 수정"
|
21
36
|
permission_view_issue_tags: "문제 태그 표시"
|
22
|
-
tags_order_by_last_created: "마지막 생성"
|
23
37
|
tags_order_by_count: "가장 많이 사용"
|
38
|
+
tags_order_by_last_created: "마지막 생성"
|
24
39
|
tags_order_by_name: "이름"
|
25
40
|
tags_sidebar_cloud: "구름"
|
26
41
|
tags_sidebar_list: "명부"
|
27
42
|
tags_sidebar_none: "없음"
|
28
43
|
tags_sidebar_simple_cloud: "단순 클라우드"
|
29
|
-
label_tags_sidebar: "사이드 바에 태그 표시"
|
30
44
|
tags_sort_by_count: "카운트"
|
31
45
|
tags_sort_by_name: "이름"
|
32
|
-
label_tags_sort_by: "태그 정렬 기준"
|
33
|
-
label_tags_suggestion_order: "제안 순서"
|
34
|
-
label_with_table_of_values: "가치 테이블"
|
35
|
-
label_with_chart: "차트 포함"
|
36
|
-
label_amount_tags: "금액 태그"
|
37
|
-
label_amount_entities_with_tags: "TAG가 있는 금액 %{name}"
|
38
|
-
label_quantity: "수량"
|
data/config/locales/pl.yml
CHANGED
@@ -1,38 +1,45 @@
|
|
1
1
|
pl:
|
2
|
+
activerecord:
|
3
|
+
errors:
|
4
|
+
messages:
|
5
|
+
invalid_mutually_exclusive_tags: "używa wzajemnie wykluczających się tagów"
|
6
|
+
field_issue_tags: "Znaczniki emisji"
|
2
7
|
field_tag_list: Tags
|
3
8
|
field_tags: Tags
|
4
|
-
field_issue_tags: Issue tags
|
5
9
|
label_active_issue_tags: "Aktywacja znaczników emisji"
|
6
10
|
label_active_wiki_tags: "Aktywacja tagów wiki"
|
7
11
|
label_add_tags: "Dodaj znaczniki"
|
12
|
+
label_amount_entities_with_tags: "Kwota %{name} z Tags"
|
13
|
+
label_amount_tags: "Kwota Tags"
|
8
14
|
label_edit_tags: "Edycja tagów"
|
9
15
|
label_manage_tags: "Zarządzaj tagami"
|
10
16
|
label_merge_selected_tags: "Łączenie wybranych tagów"
|
11
17
|
label_open_issues_only: "Wyświetlaj tylko sprawy otwarte"
|
18
|
+
label_quantity: "Ilość"
|
12
19
|
label_show_with_count: "Wyświetlanie ilości na etykiecie"
|
20
|
+
label_tag_color_theme: "Kolorowy motyw %{value}"
|
21
|
+
label_tags_colors: Kolor
|
22
|
+
label_tags_sidebar: "Wyświetlać znaczniki na pasku bocznym jako"
|
23
|
+
label_tags_sort_by: "Sortuj znaczniki według"
|
24
|
+
label_tags_suggestion_order: "Zamówienie ofertowe"
|
13
25
|
label_tags_tag: "Tag"
|
14
|
-
|
15
|
-
|
26
|
+
label_tags_without_color: "Bez koloru"
|
27
|
+
label_use_colors: "Użyj kolorów"
|
28
|
+
label_wiki_index_for_tag: "Strony Wiki z tagiem"
|
29
|
+
label_with_chart: "Z wykresem"
|
30
|
+
label_with_table_of_values: "Z tabelą wartości"
|
16
31
|
notice_failed_to_add_tags: "Nie dodano znaczników"
|
17
32
|
notice_tags_added: "Tagi dodane"
|
18
33
|
permission_add_wiki_tags: "Dodaj znaczniki wiki"
|
19
34
|
permission_create_issue_tags: "Dodaj znaczniki wydania"
|
20
35
|
permission_edit_issue_tags: "Edycja znaczników wydania"
|
21
36
|
permission_view_issue_tags: "Wyświetlanie znaczników emisji"
|
22
|
-
tags_order_by_last_created: "Ostatnio stworzony"
|
23
37
|
tags_order_by_count: "Najczęściej używany"
|
38
|
+
tags_order_by_last_created: "Ostatnio stworzony"
|
24
39
|
tags_order_by_name: "Nazwa"
|
25
40
|
tags_sidebar_cloud: "Cloud"
|
26
41
|
tags_sidebar_list: "Lista"
|
27
42
|
tags_sidebar_none: "Brak"
|
28
43
|
tags_sidebar_simple_cloud: "Simple cloud"
|
29
|
-
label_tags_sidebar: "Wyświetlać znaczniki na pasku bocznym jako"
|
30
44
|
tags_sort_by_count: "Hrabia"
|
31
45
|
tags_sort_by_name: "Nazwa"
|
32
|
-
label_tags_sort_by: "Sortuj znaczniki według"
|
33
|
-
label_tags_suggestion_order: "Zamówienie ofertowe"
|
34
|
-
label_with_table_of_values: "Z tabelą wartości"
|
35
|
-
label_with_chart: "Z wykresem"
|
36
|
-
label_amount_tags: "Kwota Tags"
|
37
|
-
label_amount_entities_with_tags: "Kwota %{name} z Tags"
|
38
|
-
label_quantity: "Ilość"
|
data/config/locales/pt-BR.yml
CHANGED
@@ -1,38 +1,45 @@
|
|
1
1
|
pt-BR:
|
2
|
+
activerecord:
|
3
|
+
errors:
|
4
|
+
messages:
|
5
|
+
invalid_mutually_exclusive_tags: "utiliza etiquetas mutuamente exclusivas"
|
6
|
+
field_issue_tags: Issue tags
|
2
7
|
field_tag_list: Tags
|
3
8
|
field_tags: Tags
|
4
|
-
field_issue_tags: Issue tags
|
5
9
|
label_active_issue_tags: "Ativar as etiquetas de emissão"
|
6
10
|
label_active_wiki_tags: "Ativar as etiquetas wiki"
|
7
11
|
label_add_tags: "Adicionar etiquetas"
|
12
|
+
label_amount_entities_with_tags: "Quantidade %{name} com etiquetas"
|
13
|
+
label_amount_tags: "Valor Etiquetas"
|
8
14
|
label_edit_tags: "Editar etiquetas"
|
9
15
|
label_manage_tags: "Gerenciar etiquetas"
|
10
16
|
label_merge_selected_tags: "Fundir tags selecionadas"
|
11
17
|
label_open_issues_only: "Exibir apenas questões em aberto"
|
18
|
+
label_quantity: "Quantidade"
|
12
19
|
label_show_with_count: "Mostrar quantidade na etiqueta"
|
20
|
+
label_tag_color_theme: "Tema da cor %{value}"
|
21
|
+
label_tags_colors: "Cor"
|
22
|
+
label_tags_sidebar: "Mostrar etiquetas na barra lateral como"
|
23
|
+
label_tags_sort_by: "Ordenar tags por"
|
24
|
+
label_tags_suggestion_order: "Pedido de sugestão"
|
13
25
|
label_tags_tag: "Tag"
|
26
|
+
label_tags_without_color: "Sem cor"
|
14
27
|
label_use_colors: "Usar cores"
|
15
|
-
|
28
|
+
label_wiki_index_for_tag: "Páginas Wiki com tag"
|
29
|
+
label_with_chart: "Com gráfico"
|
30
|
+
label_with_table_of_values: "Com tabela de valores"
|
16
31
|
notice_failed_to_add_tags: "Falha em adicionar tags"
|
17
32
|
notice_tags_added: "Tags adicionadas"
|
18
33
|
permission_add_wiki_tags: "Adicionar etiquetas wiki"
|
19
34
|
permission_create_issue_tags: "Adicionar etiquetas de edição"
|
20
35
|
permission_edit_issue_tags: "Editar etiquetas de edição"
|
21
36
|
permission_view_issue_tags: "Exibir etiquetas de edição"
|
22
|
-
tags_order_by_last_created: "Última criação"
|
23
37
|
tags_order_by_count: "Mais utilizados"
|
38
|
+
tags_order_by_last_created: "Última criação"
|
24
39
|
tags_order_by_name: "Nome"
|
25
40
|
tags_sidebar_cloud: "Cloud"
|
26
41
|
tags_sidebar_list: "Lista"
|
27
42
|
tags_sidebar_none: "Nenhum"
|
28
43
|
tags_sidebar_simple_cloud: "Simple cloud"
|
29
|
-
label_tags_sidebar: "Mostrar etiquetas na barra lateral como"
|
30
44
|
tags_sort_by_count: "Conde"
|
31
45
|
tags_sort_by_name: "Nome"
|
32
|
-
label_tags_sort_by: "Ordenar tags por"
|
33
|
-
label_tags_suggestion_order: "Pedido de sugestão"
|
34
|
-
label_with_table_of_values: "Com tabela de valores"
|
35
|
-
label_with_chart: "Com gráfico"
|
36
|
-
label_amount_tags: "Valor Etiquetas"
|
37
|
-
label_amount_entities_with_tags: "Quantidade %{name} com etiquetas"
|
38
|
-
label_quantity: "Quantidade"
|
data/config/locales/ru.yml
CHANGED
@@ -1,38 +1,45 @@
|
|
1
1
|
ru:
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
2
|
+
activerecord:
|
3
|
+
errors:
|
4
|
+
messages:
|
5
|
+
invalid_mutually_exclusive_tags: "использует взаимоисключающие метки"
|
6
|
+
field_issue_tags: "Метки задач"
|
7
|
+
field_tag_list: "Метки"
|
8
|
+
field_tags: "Метки"
|
9
|
+
label_active_issue_tags: "Активировать метки задач"
|
10
|
+
label_active_wiki_tags: "Активировать метки вики"
|
11
|
+
label_add_tags: "Добавьте метки"
|
12
|
+
label_amount_entities_with_tags: "Сумма %{name} с метками"
|
13
|
+
label_amount_tags: "Метки Сумма"
|
14
|
+
label_edit_tags: "Редактировать метки"
|
15
|
+
label_manage_tags: "Управление метками"
|
16
|
+
label_merge_selected_tags: "Объединить выбранные метки"
|
11
17
|
label_open_issues_only: "Отображать только открытые задачи"
|
12
|
-
|
13
|
-
|
18
|
+
label_quantity: "Количество"
|
19
|
+
label_show_with_count: "Отображать количество на метке"
|
20
|
+
label_tag_color_theme: "Цветовая тема %{value}"
|
21
|
+
label_tags_colors: "Цвет"
|
22
|
+
label_tags_sidebar: "Способ отображения меток на боковой панели"
|
23
|
+
label_tags_sort_by: "Сортировать метки по"
|
24
|
+
label_tags_suggestion_order: "Порядок предложения при вводе"
|
25
|
+
label_tags_tag: "Метка"
|
26
|
+
label_tags_without_color: "Без цвета"
|
14
27
|
label_use_colors: "Использовать цвета"
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
28
|
+
label_wiki_index_for_tag: "Вики-страницы с меткой"
|
29
|
+
label_with_chart: "С графиком"
|
30
|
+
label_with_table_of_values: "С таблицей значений"
|
31
|
+
notice_failed_to_add_tags: "Не удалось добавить метки"
|
32
|
+
notice_tags_added: "Метки добавлены"
|
33
|
+
permission_add_wiki_tags: "Добавление меток вики"
|
34
|
+
permission_create_issue_tags: "Добавление меток задач"
|
35
|
+
permission_edit_issue_tags: "Редактирование меток задач"
|
36
|
+
permission_view_issue_tags: "Просмотр меток задач"
|
23
37
|
tags_order_by_count: "Наиболее часто используемые"
|
38
|
+
tags_order_by_last_created: "Недавно созданные"
|
24
39
|
tags_order_by_name: "Имя"
|
25
40
|
tags_sidebar_cloud: "Облако"
|
26
41
|
tags_sidebar_list: "Список"
|
27
42
|
tags_sidebar_none: "Нет"
|
28
43
|
tags_sidebar_simple_cloud: "Простое облако"
|
29
|
-
label_tags_sidebar: "Способ отображения тегов на боковой панели"
|
30
44
|
tags_sort_by_count: "Количеству"
|
31
45
|
tags_sort_by_name: "Имени"
|
32
|
-
label_tags_sort_by: "Сортировать теги по"
|
33
|
-
label_tags_suggestion_order: "Порядок предложения при вводе"
|
34
|
-
label_with_table_of_values: "С таблицей значений"
|
35
|
-
label_with_chart: "С графиком"
|
36
|
-
label_amount_tags: "Теги Сумма"
|
37
|
-
label_amount_entities_with_tags: "Сумма %{name} с тегами"
|
38
|
-
label_quantity: "Количество"
|
data/config/settings.yml
CHANGED
@@ -1,9 +1,9 @@
|
|
1
|
-
active_issue_tags: 0
|
2
|
-
active_wiki_tags: 0
|
3
|
-
open_issues_only: 0
|
4
|
-
show_with_count: 0
|
1
|
+
active_issue_tags: '0'
|
2
|
+
active_wiki_tags: '0'
|
3
|
+
open_issues_only: '0'
|
4
|
+
show_with_count: '0'
|
5
|
+
tags_color_theme: '1'
|
5
6
|
tags_sidebar: 'none'
|
6
7
|
tags_sort_by: 'name'
|
7
8
|
tags_sort_order: 'asc'
|
8
9
|
tags_suggestion_order: 'name'
|
9
|
-
use_colors: 1
|
Binary file
|
Binary file
|
Binary file
|
@@ -63,9 +63,22 @@ module AdditionalTags
|
|
63
63
|
def issues_bulk_tags_fix(issue, params)
|
64
64
|
return unless params && params[:issue]
|
65
65
|
|
66
|
-
|
66
|
+
common_tags =
|
67
|
+
if params[:common_tags].present?
|
68
|
+
params[:common_tags].split(ActsAsTaggableOn.delimiter).collect(&:strip)
|
69
|
+
else
|
70
|
+
[]
|
71
|
+
end
|
72
|
+
current_tags = ActsAsTaggableOn::TagList.new issue.tags.to_a
|
67
73
|
new_tags = Array(params[:issue][:tag_list]).reject(&:empty?)
|
68
|
-
|
74
|
+
|
75
|
+
tags_to_add = new_tags - common_tags
|
76
|
+
tags_to_remove = common_tags - new_tags
|
77
|
+
|
78
|
+
current_tags.add tags_to_add
|
79
|
+
current_tags.remove tags_to_remove
|
80
|
+
|
81
|
+
issue.tag_list = current_tags
|
69
82
|
end
|
70
83
|
|
71
84
|
def tags_journal(issue, params)
|
@@ -13,6 +13,8 @@ module AdditionalTags
|
|
13
13
|
before_save :prepare_save_tag_change
|
14
14
|
before_save :sort_tag_list
|
15
15
|
|
16
|
+
validate :validate_tags, if: proc { AdditionalTags.setting?(:active_issue_tags) }
|
17
|
+
|
16
18
|
after_commit :add_remove_unused_tags_job, on: %i[update destroy],
|
17
19
|
if: proc { AdditionalTags.setting?(:active_issue_tags) }
|
18
20
|
|
@@ -29,21 +31,58 @@ module AdditionalTags
|
|
29
31
|
tags.all? { |tag| allowed_tags.include? tag }
|
30
32
|
end
|
31
33
|
|
32
|
-
def group_by_status_with_tags(project = nil)
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
34
|
+
def group_by_status_with_tags(project = nil, user = User.current)
|
35
|
+
scope = if project && Setting.display_subprojects_issues?
|
36
|
+
visible(user).where(AdditionalTags::Tags.subproject_sql(project))
|
37
|
+
else
|
38
|
+
visible user, project: project
|
39
|
+
end
|
40
|
+
|
41
|
+
scope.joins(:status)
|
42
|
+
.joins(:tags)
|
43
|
+
.group(:is_closed, 'tag_id')
|
44
|
+
.count
|
37
45
|
end
|
38
46
|
|
39
47
|
def available_tags(**options)
|
40
|
-
options[:permission]
|
48
|
+
options[:permission] ||= :view_issue_tags
|
41
49
|
tags = AdditionalTags::Tags.available_tags self, **options
|
42
50
|
return tags unless options[:open_issues_only]
|
43
51
|
|
44
52
|
tags.joins("JOIN #{IssueStatus.table_name} ON #{IssueStatus.table_name}.id = #{table_name}.status_id")
|
45
53
|
.where(issue_statuses: { is_closed: false })
|
46
54
|
end
|
55
|
+
|
56
|
+
def common_tag_list_from_issues(ids)
|
57
|
+
common_tags = ActsAsTaggableOn::Tag.joins(:taggings)
|
58
|
+
.select(
|
59
|
+
"#{ActiveRecord::Base.connection.quote_table_name ActsAsTaggableOn.tags_table}.id",
|
60
|
+
"#{ActiveRecord::Base.connection.quote_table_name ActsAsTaggableOn.tags_table}.name"
|
61
|
+
)
|
62
|
+
.where(taggings: { taggable_type: 'Issue', taggable_id: ids })
|
63
|
+
.group(
|
64
|
+
"#{ActiveRecord::Base.connection.quote_table_name ActsAsTaggableOn.tags_table}.id",
|
65
|
+
"#{ActiveRecord::Base.connection.quote_table_name ActsAsTaggableOn.tags_table}.name"
|
66
|
+
)
|
67
|
+
.having('count(*) = ?', ids.count).to_a
|
68
|
+
|
69
|
+
ActsAsTaggableOn::TagList.new common_tags
|
70
|
+
end
|
71
|
+
|
72
|
+
def load_visible_tags(issues, user = User.current)
|
73
|
+
return if issues.blank?
|
74
|
+
|
75
|
+
available_projects = Project.where(AdditionalTags::Tags.visible_condition(user)).ids
|
76
|
+
|
77
|
+
issues.each do |issue|
|
78
|
+
tags = if available_projects.include? issue.project_id
|
79
|
+
issue.tags
|
80
|
+
else
|
81
|
+
[]
|
82
|
+
end
|
83
|
+
issue.instance_variable_set :@visible_tags, tags
|
84
|
+
end
|
85
|
+
end
|
47
86
|
end
|
48
87
|
|
49
88
|
module InstanceMethods
|
@@ -62,7 +101,7 @@ module AdditionalTags
|
|
62
101
|
tags = attrs.delete :tag_list
|
63
102
|
tags = Array(tags).reject(&:empty?)
|
64
103
|
|
65
|
-
Additionals.debug "tags: #{tags.inspect} - project: #{project&.id} - access: #{user.allowed_to? :create_issue_tags, project}"
|
104
|
+
# Additionals.debug "tags: #{tags.inspect} - project: #{project&.id} - access: #{user.allowed_to? :create_issue_tags, project}"
|
66
105
|
|
67
106
|
if user.allowed_to?(:create_issue_tags, project) ||
|
68
107
|
user.allowed_to?(:edit_issue_tags, project) && Issue.allowed_tags?(tags)
|
@@ -88,6 +127,13 @@ module AdditionalTags
|
|
88
127
|
|
89
128
|
self.tag_list = AdditionalTags::Tags.sort_tags tags
|
90
129
|
end
|
130
|
+
|
131
|
+
def validate_tags
|
132
|
+
return if !User.current.allowed_to?(:create_issue_tags, project) &&
|
133
|
+
!(User.current.allowed_to?(:edit_issue_tags, project) && Issue.allowed_tags?(tags))
|
134
|
+
|
135
|
+
errors.add :tag_list, :invalid_mutually_exclusive_tags unless AdditionalTag.valid_mutually_exclusive_tag tag_list
|
136
|
+
end
|
91
137
|
end
|
92
138
|
end
|
93
139
|
end
|
@@ -15,6 +15,9 @@ module AdditionalTags
|
|
15
15
|
|
16
16
|
alias_method :available_columns_without_tags, :available_columns
|
17
17
|
alias_method :available_columns, :available_columns_with_tags
|
18
|
+
|
19
|
+
alias_method :issues_without_tags, :issues
|
20
|
+
alias_method :issues, :issues_with_tags
|
18
21
|
end
|
19
22
|
|
20
23
|
module InstanceOverwriteMethods
|
@@ -29,9 +32,24 @@ module AdditionalTags
|
|
29
32
|
|
30
33
|
self
|
31
34
|
end
|
35
|
+
|
36
|
+
def sql_for_tags_field(field, _operator, values)
|
37
|
+
build_sql_for_tags_field_with_permission klass: queried_class,
|
38
|
+
operator: operator_for(field),
|
39
|
+
values: values,
|
40
|
+
permission: :view_issue_tags
|
41
|
+
end
|
32
42
|
end
|
33
43
|
|
34
44
|
module InstanceMethods
|
45
|
+
def issues_with_tags(**options)
|
46
|
+
issues = issues_without_tags(**options)
|
47
|
+
return issues unless has_column? :tags
|
48
|
+
|
49
|
+
Issue.load_visible_tags issues
|
50
|
+
issues
|
51
|
+
end
|
52
|
+
|
35
53
|
def initialize_available_filters_with_tags
|
36
54
|
initialize_available_filters_without_tags
|
37
55
|
|
@@ -15,9 +15,7 @@ module AdditionalTags
|
|
15
15
|
module InstanceMethods
|
16
16
|
def column_content_with_tags(column, item)
|
17
17
|
if column.name == :issue_tags || item.is_a?(Issue) && column.name == :tags
|
18
|
-
additional_tag_links
|
19
|
-
tag_controller: 'issues',
|
20
|
-
use_colors: AdditionalTags.setting?(:use_colors)
|
18
|
+
additional_tag_links item.instance_variable_get(:@visible_tags), tag_controller: 'issues'
|
21
19
|
else
|
22
20
|
column_content_without_tags column, item
|
23
21
|
end
|
@@ -11,7 +11,9 @@ module AdditionalTags
|
|
11
11
|
|
12
12
|
module InstanceMethods
|
13
13
|
def sql_for_tags_field(field, _operator, values)
|
14
|
-
build_sql_for_tags_field klass: queried_class,
|
14
|
+
build_sql_for_tags_field klass: queried_class,
|
15
|
+
operator: operator_for(field),
|
16
|
+
values: values
|
15
17
|
end
|
16
18
|
|
17
19
|
def initialize_tags_filter(position: nil)
|
@@ -60,6 +62,25 @@ module AdditionalTags
|
|
60
62
|
end
|
61
63
|
end
|
62
64
|
|
65
|
+
# NOTE: should be used, if tags required permission check
|
66
|
+
def build_sql_for_tags_field_with_permission(klass:, operator:, values:, permission:)
|
67
|
+
compare = ['=', '*'].include?(operator) ? 'in' : 'not_in'
|
68
|
+
case operator
|
69
|
+
when '=', '!'
|
70
|
+
ids_list = klass.tagged_with(values, any: true).ids
|
71
|
+
# special case: filter with deleted tag
|
72
|
+
return '(1=0)' if ids_list.blank? && values.present? && operator == '='
|
73
|
+
else
|
74
|
+
allowed_projects = Project.where(Project.allowed_to_condition(User.current, permission))
|
75
|
+
.select(:id)
|
76
|
+
ids_list = klass.tagged_with(klass.available_tags(skip_pre_condition: true), any: true)
|
77
|
+
.where(project_id: allowed_projects).ids
|
78
|
+
end
|
79
|
+
|
80
|
+
"(#{klass.arel_table[:id].send(compare, ids_list).to_sql})"
|
81
|
+
end
|
82
|
+
|
83
|
+
# NOTE: should be used, if tags do not require permission check
|
63
84
|
def build_sql_for_tags_field(klass:, operator:, values:)
|
64
85
|
compare = ['=', '*'].include?(operator) ? 'IN' : 'NOT IN'
|
65
86
|
case operator
|