additional_tags 1.0.5 → 1.0.7

Sign up to get free protection for your applications and to get access to all the features.
Files changed (59) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/codeql-analysis.yml +6 -6
  3. data/.github/workflows/linters.yml +16 -4
  4. data/.github/workflows/tests.yml +7 -4
  5. data/.gitignore +3 -0
  6. data/.rubocop.yml +9 -6
  7. data/.stylelintrc.json +12 -155
  8. data/README.md +28 -9
  9. data/app/controllers/additional_tags_controller.rb +10 -10
  10. data/app/controllers/issue_tags_controller.rb +3 -1
  11. data/app/helpers/additional_tags_helper.rb +39 -30
  12. data/app/helpers/additional_tags_issues_helper.rb +1 -3
  13. data/app/helpers/additional_tags_wiki_helper.rb +16 -10
  14. data/app/jobs/additional_tags_remove_unused_tag_job.rb +11 -6
  15. data/app/models/additional_tag.rb +98 -0
  16. data/app/views/additional_tags/_tag_list.html.slim +12 -6
  17. data/app/views/additional_tags/merge.html.slim +0 -1
  18. data/app/views/additional_tags/settings/_general.html.slim +7 -1
  19. data/app/views/additional_tags/settings/_manage_tags.html.slim +8 -1
  20. data/app/views/context_menus/_issues_tags.html.slim +7 -1
  21. data/app/views/dashboards/blocks/_issue_tags.html.slim +9 -7
  22. data/app/views/issue_tags/_edit_modal.html.slim +7 -7
  23. data/app/views/issue_tags/edit.js.erb +1 -1
  24. data/app/views/issues/_tags.html.slim +12 -7
  25. data/app/views/issues/_tags_bulk_edit.html.slim +2 -1
  26. data/app/views/issues/_tags_form_details.html.slim +1 -2
  27. data/app/views/wiki/_tags_form.html.slim +4 -0
  28. data/app/views/wiki/_tags_form_bottom.html.slim +1 -2
  29. data/app/views/wiki/_tags_show.html.slim +7 -7
  30. data/app/views/wiki/tag_index.html.slim +2 -2
  31. data/assets/javascripts/tags.js +3 -3
  32. data/assets/stylesheets/tags.css +41 -16
  33. data/config/locales/bg.yml +18 -11
  34. data/config/locales/cs.yml +19 -12
  35. data/config/locales/de.yml +19 -12
  36. data/config/locales/en.yml +19 -12
  37. data/config/locales/es.yml +19 -12
  38. data/config/locales/fr.yml +19 -12
  39. data/config/locales/it.yml +19 -12
  40. data/config/locales/ja.yml +18 -11
  41. data/config/locales/ko.yml +18 -11
  42. data/config/locales/pl.yml +19 -12
  43. data/config/locales/pt-BR.yml +18 -11
  44. data/config/locales/ru.yml +34 -27
  45. data/config/settings.yml +5 -5
  46. data/doc/images/additional-tags-framework.png +0 -0
  47. data/doc/images/additional-tags.gif +0 -0
  48. data/doc/images/tag-overview.png +0 -0
  49. data/lib/additional_tags/hooks/view_hook.rb +15 -2
  50. data/lib/additional_tags/patches/issue_patch.rb +53 -7
  51. data/lib/additional_tags/patches/issue_query_patch.rb +18 -0
  52. data/lib/additional_tags/patches/queries_helper_patch.rb +1 -3
  53. data/lib/additional_tags/patches/query_patch.rb +23 -2
  54. data/lib/additional_tags/patches/wiki_page_patch.rb +8 -2
  55. data/lib/additional_tags/plugin_version.rb +1 -1
  56. data/lib/additional_tags/tags.rb +35 -14
  57. data/lib/additional_tags.rb +5 -0
  58. data/package.json +8 -0
  59. metadata +6 -3
@@ -0,0 +1,98 @@
1
+ # frozen_string_literal: true
2
+
3
+ class AdditionalTag
4
+ GROUP_SEP = ':'
5
+ SCOPE_SEP = '::'
6
+
7
+ class << self
8
+ def valid_mutually_exclusive_tag(tag_list)
9
+ return true if tag_list.blank?
10
+
11
+ tags = tag_list.select { |t| t.include? SCOPE_SEP }
12
+ return true if tags.blank?
13
+
14
+ groups = tags.map { |t| new(name: t).group_name }
15
+ groups == groups.uniq
16
+ end
17
+ end
18
+
19
+ # NOTE: only use bg_color parameter, if background color should not
20
+ # calculated by AdditionalTag - if you want to assign manual color
21
+ def initialize(name:, disable_grouping: false, color_theme: nil, bg_color: nil)
22
+ @tag_name = name.to_s
23
+ @disable_grouping = disable_grouping
24
+ @color_theme = color_theme.to_s
25
+ @bg_color = bg_color
26
+ end
27
+
28
+ def name_for_color
29
+ # different colors for non-grouped, grouped and scoped tag
30
+ name = if scoped? || grouped?
31
+ "#{group_name}#{sep}"
32
+ else
33
+ tag_name
34
+ end
35
+
36
+ if @color_theme.present? && @color_theme != '0' && @color_theme != '1'
37
+ "#{name}#{@color_theme}"
38
+ else
39
+ name
40
+ end
41
+ end
42
+
43
+ def tag_bg_color
44
+ @tag_bg_color ||= @bg_color || "##{Digest::SHA256.hexdigest(name_for_color)[0..5]}"
45
+ end
46
+
47
+ # calculate contrast text color according to YIQ method
48
+ # https://24ways.org/2010/calculating-color-contrast/
49
+ # https://stackoverflow.com/questions/3942878/how-to-decide-font-color-in-white-or-black-depending-on-background-color
50
+ def tag_fg_color
51
+ @tag_fg_color ||= begin
52
+ r = tag_bg_color[1..2].hex
53
+ g = tag_bg_color[3..4].hex
54
+ b = tag_bg_color[5..6].hex
55
+ (r * 299 + g * 587 + b * 114) >= 128_000 ? 'black' : 'white'
56
+ end
57
+ end
58
+
59
+ def sep
60
+ scoped? ? SCOPE_SEP : GROUP_SEP
61
+ end
62
+
63
+ def tag_name
64
+ scoped? ? group_name : @tag_name
65
+ end
66
+
67
+ def labels
68
+ @labels ||= scoped? ? scope_labels : group_labels
69
+ end
70
+
71
+ def scope_labels
72
+ @scope_labels ||= @tag_name.split(SCOPE_SEP).map(&:strip)
73
+ end
74
+
75
+ def group_labels
76
+ @group_labels ||= @tag_name.split(GROUP_SEP).map(&:strip)
77
+ end
78
+
79
+ def group_name
80
+ if labels.length > 2
81
+ labels[0...-1].join sep
82
+ else
83
+ labels.first
84
+ end
85
+ end
86
+
87
+ def group_value
88
+ labels.last
89
+ end
90
+
91
+ def scoped?
92
+ !@disable_grouping && scope_labels.length > 1
93
+ end
94
+
95
+ def grouped?
96
+ !@disable_grouping && group_labels.length > 1
97
+ end
98
+ end
@@ -15,17 +15,23 @@
15
15
  span.contextual
16
16
  = link_to l(:label_edit_tags),
17
17
  {},
18
- onclick: "$('#edit_tags_form').show(); $('#tags-data').hide(); return false;",
19
- id: 'edit_tags_link'
18
+ onclick: "$('#edit-tags-form').show(); $('#tags-data').hide(); return false;",
19
+ id: 'edit-tags-link'
20
20
 
21
- #edit_tags_form.hidden
21
+ #edit-tags-form.hidden
22
22
  = form_tag update_url, method: :put do
23
- = render partial: defined?(tags_form) ? tags_form : 'tags_form',
24
- locals: { css_id: defined?(css_id) ? css_id : nil }
23
+ = render defined?(tags_form) ? tags_form : 'tags_form',
24
+ css_id: defined?(css_id) ? css_id : nil
25
25
  '
26
26
  = submit_tag l(:button_save), class: 'button-small'
27
27
  '
28
- = link_to l(:button_cancel), {}, onclick: "$('#edit_tags_form').hide(); $('#tags-data').show(); return false;"
28
+ = link_to l(:button_cancel), {}, onclick: "$('#edit-tags-form').hide(); $('#tags-data').show(); return false;"
29
+
30
+ javascript:
31
+ $(function() {
32
+ var eventSelect = $('#issue_tag_list');
33
+ eventSelect.on('select2:close', function(e) { fixScopedTags(e, eventSelect); });
34
+ })
29
35
 
30
36
  - else
31
37
  = additional_tag_links entry.tags,
@@ -8,7 +8,6 @@ h2
8
8
  = error_messages_for 'tag'
9
9
  = additional_tag_links @tags,
10
10
  show_count: true,
11
- use_colors: AdditionalTags.setting?(:use_colors),
12
11
  link: '#'
13
12
  .box
14
13
  p
@@ -23,7 +23,13 @@ fieldset.settings
23
23
  options_for_select(%w[name last_created count].collect { |v| [l("tags_order_by_#{v}"), v] },
24
24
  @settings['tags_suggestion_order'])
25
25
  p
26
- = additionals_settings_checkbox :use_colors
26
+ = additionals_settings_select :tags_color_theme, options_for_select([[l(:label_tags_without_color), '0'],
27
+ [l(:label_tag_color_theme, value: 1), '1'],
28
+ [l(:label_tag_color_theme, value: 2), 'a'],
29
+ [l(:label_tag_color_theme, value: 3), 'b'],
30
+ [l(:label_tag_color_theme, value: 4), 'c'],
31
+ [l(:label_tag_color_theme, value: 5), 'd']],
32
+ @settings['tags_color_theme'])
27
33
 
28
34
  fieldset.settings
29
35
  legend = l :label_issue_plural
@@ -13,11 +13,18 @@
13
13
  th = column_values[:label]
14
14
  th
15
15
  tbody
16
+ - use_colors = AdditionalTags.use_colors?
17
+ - color_theme = AdditionalTags.setting :tags_color_theme
16
18
  - tags.each do |tag|
17
19
  tr.hascontextmenu id="#{tag.id}"
18
20
  td.checkbox.hide-when-print
19
21
  = check_box_tag 'ids[]', tag.id, false, id: nil
20
- td = additional_tag_link tag, link: edit_additional_tag_path(tag)
22
+ td
23
+ = additional_tag_link tag,
24
+ link: edit_additional_tag_path(tag),
25
+ use_colors: use_colors,
26
+ color_theme: color_theme
27
+
21
28
  - manageable_tag_column_values(tag).each do |column|
22
29
  td = column
23
30
  td.buttons
@@ -5,6 +5,12 @@
5
5
  ul
6
6
  li
7
7
  = context_menu_link l(:button_add),
8
- edit_issue_tags_path(ids: @issue_ids, search: params[:search]),
8
+ edit_issue_tags_path(ids: @issue_ids, search: params[:search], append: 'true'),
9
9
  remote: true,
10
10
  class: 'icon icon-add'
11
+ - if @issue_ids.size == 1
12
+ li
13
+ = context_menu_link l(:button_edit),
14
+ edit_issue_tags_path(ids: @issue_ids, search: params[:search]),
15
+ remote: true,
16
+ class: 'icon icon-edit'
@@ -7,12 +7,12 @@ h3 = block_definition[:label]
7
7
  statuses: { true => :closed, false => :open },
8
8
  group_id_is_bool: true
9
9
 
10
- = render partial: 'common/tag_summary_block',
11
- locals: { tags: tags,
12
- entities_label: l(:label_issue_plural),
13
- totals_link: link_to_issue_tags_totals(entries: counts,
14
- project: @project,
15
- open_issues_only: open_issues_only) }
10
+ = render 'common/tag_summary_block',
11
+ tags: tags,
12
+ entities_label: l(:label_issue_plural),
13
+ totals_link: link_to_issue_tags_totals(entries: counts,
14
+ project: @project,
15
+ open_issues_only: open_issues_only)
16
16
 
17
17
  - if RedminePluginKit.true? settings[:with_table_of_values]
18
18
  - if tags.present?
@@ -28,13 +28,15 @@ h3 = block_definition[:label]
28
28
  th = l :label_closed_issues_plural
29
29
  th = l :label_total
30
30
  tbody
31
+ - color_theme = AdditionalTags.setting :tags_color_theme
31
32
  - tags.each do |tag|
32
33
  tr
33
34
  td.name = additional_tag_link tag,
34
35
  tag_action: 'index',
35
36
  tag_controller: 'issues',
36
37
  filter: issue_tag_status_filter(open_issues_only: open_issues_only),
37
- use_colors: RedminePluginKit.true?(settings[:use_colors])
38
+ use_colors: RedminePluginKit.true?(settings[:use_colors]),
39
+ color_theme: color_theme
38
40
  - unless open_issues_only
39
41
  td.value = additional_tag_link tag,
40
42
  tag_action: 'index',
@@ -1,4 +1,4 @@
1
- h3.title = l :label_add_tags
1
+ h3.title = @append ? l(:label_add_tags) : l(:label_edit_tags)
2
2
 
3
3
  - if @is_bulk_editing
4
4
  h3 = l :label_bulk_edit_selected_issues
@@ -9,24 +9,24 @@ h3.title = l :label_add_tags
9
9
  h3
10
10
  span = link_to_issue @issues.first
11
11
 
12
- = form_tag issue_tags_path(ids: @issue_ids, search: params[:search]) do
12
+ = form_tag issue_tags_path(ids: @issue_ids, search: params[:search], append: @append.to_s) do
13
13
  fieldset.box
14
14
  legend = l :field_tags
15
15
  #issue_tags
16
16
  = additionals_select2_tag 'issue[tag_list]',
17
- options_for_select(@issue_tags.map { |tag| [tag, tag] }, @issue_tags),
17
+ options_for_select(@append ? {} : @issue_tags.map { |tag| [tag, tag] }, @issue_tags),
18
18
  multiple: true,
19
19
  style: 'width: 100%;',
20
20
  url: issue_tags_auto_completes_path(project_id: @project),
21
21
  placeholder: @is_bulk_editing ? t(:label_no_change_option) : '+ add tag',
22
22
  tags: User.current.allowed_to?(:create_issue_tags, @project)
23
- p.most_used_tags
24
- = safe_join @most_used_tags.collect { |t| tag.span t.name, class: 'most_used_tag' }, ', '
23
+ p.most-used-tags
24
+ = safe_join @most_used_tags.collect { |t| tag.span t.name, class: 'most-used-tag' }, ', '
25
25
 
26
26
  .buttons
27
- = submit_tag l(:button_add), name: nil
27
+ = submit_tag l(@append ? :button_add : :button_save), name: nil
28
28
  '
29
- = link_to_function l(:button_cancel), 'hideModal(this);'
29
+ = link_to_function l(:button_cancel), 'hideModal(this)'
30
30
 
31
31
  javascript:
32
32
  var mostUsedTags = #{raw @most_used_tags.map(&:name)};
@@ -1,2 +1,2 @@
1
- $('#ajax-modal').html('<%= escape_javascript(render partial: 'issue_tags/edit_modal') %>');
1
+ $('#ajax-modal').html("<%= escape_javascript(render 'issue_tags/edit_modal') %>");
2
2
  showModal('ajax-modal', '600px');
@@ -1,8 +1,13 @@
1
1
  - if AdditionalTags.setting?(:active_issue_tags) && User.current.allowed_to?(:view_issue_tags, issue.project)
2
- = render partial: 'additional_tags/tag_list',
3
- locals: { entry: issue,
4
- show_always: true,
5
- editable: issue.editable?(User.current),
6
- css_id: 'issue_tag_list_show',
7
- update_url: issue_path(issue),
8
- use_colors: AdditionalTags.setting?(:use_colors) }
2
+ = render 'additional_tags/tag_list',
3
+ entry: issue,
4
+ show_always: true,
5
+ editable: issue.editable?(User.current),
6
+ css_id: 'issue_tag_list_show',
7
+ update_url: issue_path(issue),
8
+ use_colors: AdditionalTags.use_colors?
9
+
10
+ - if issue.editable? User.current
11
+ javascript:
12
+ var eventSelect = $('#issue_tag_list_show');
13
+ eventSelect.on('select2:close', function(e) { fixScopedTags(e, eventSelect); });
@@ -1,7 +1,8 @@
1
- - tags = defined?(form) ? form.object.tag_list : []
1
+ - tags = Issue.common_tag_list_from_issues(@issues.map(&:id))
2
2
  = additionals_select2_tag 'issue[tag_list]',
3
3
  options_for_select(tags.map { |tag| [tag, tag] }, tags),
4
4
  multiple: true,
5
5
  url: issue_tags_auto_completes_path,
6
6
  placeholder: l(:label_add_tags),
7
7
  tags: true
8
+ = hidden_field_tag 'common_tags', tags.to_s
@@ -3,5 +3,4 @@
3
3
  div
4
4
  p#issue_tags
5
5
  = label_tag l(:field_tag_list)
6
- = render partial: tags_form,
7
- locals: { project: project }
6
+ = render tags_form, project: project
@@ -5,3 +5,7 @@
5
5
  url: wiki_tags_auto_completes_path(project_id: @project),
6
6
  placeholder: l(:label_add_tags),
7
7
  tags: true
8
+
9
+ javascript:
10
+ var eventSelect = $('#wiki_page_tag_list');
11
+ eventSelect.on('select2:close', function(e) { fixScopedTags(e, eventSelect); });
@@ -1,5 +1,4 @@
1
1
  - if AdditionalTags.setting?(:active_wiki_tags) && User.current.allowed_to?(:add_wiki_tags, @project)
2
2
  p#wiki_tags
3
3
  = label_tag l(:field_tag_list)
4
- = render partial: 'wiki/tags_form',
5
- locals: { project: project, page: page }
4
+ = render 'wiki/tags_form', project: project, page: page
@@ -1,9 +1,9 @@
1
1
  - if AdditionalTags.setting? :active_wiki_tags
2
2
  .wiki-attributes
3
- = render partial: 'additional_tags/tag_list',
4
- locals: { entry: page,
5
- show_always: true,
6
- link_wiki_tag: true,
7
- editable: User.current.allowed_to?(:add_wiki_tags, @project),
8
- update_url: update_tags_project_wiki_page_path(@project, page.title),
9
- use_colors: AdditionalTags.setting?(:use_colors) }
3
+ = render 'additional_tags/tag_list',
4
+ entry: page,
5
+ show_always: true,
6
+ link_wiki_tag: true,
7
+ editable: User.current.allowed_to?(:add_wiki_tags, @project),
8
+ update_url: update_tags_project_wiki_page_path(@project, page.title),
9
+ use_colors: AdditionalTags.use_colors?
@@ -2,7 +2,7 @@
2
2
  - if User.current.allowed_to? :edit_wiki_pages, @project
3
3
  = link_to l(:label_wiki_page_new), new_project_wiki_page_path(@project), remote: true, class: 'icon icon-add'
4
4
 
5
- h2 = render_wiki_index_title @project, @tag
5
+ h2 = render_wiki_index_title project: @project, tag: @tag
6
6
 
7
7
  - if @pages.empty?
8
8
  p.nodata = l :label_no_data
@@ -18,4 +18,4 @@ h2 = render_wiki_index_title @project, @tag
18
18
  = link_to page.parent.pretty_title, project_wiki_page_path(@project, page.parent.title)
19
19
 
20
20
  - content_for :sidebar do
21
- = render partial: 'sidebar'
21
+ = render 'sidebar'
@@ -1,6 +1,6 @@
1
1
  /* global mostUsedTags:writable */
2
2
  $(function() {
3
- $('body').on('click', '.most_used_tags .most_used_tag', function(e) {
3
+ $('body').on('click', '.most-used-tags .most-used-tag', function(e) {
4
4
  var $tagsSelect = $('select#issue_tag_list');
5
5
  var tag = e.target.innerText;
6
6
  if ($tagsSelect.find('option[value=\'' + tag + '\']').length === 0) {
@@ -10,10 +10,10 @@ $(function() {
10
10
 
11
11
  mostUsedTags = $.grep(mostUsedTags, function(t) { return t != tag; });
12
12
  var tagsHtml = mostUsedTags.map(function(tag) {
13
- return '<span class="most_used_tag">' + tag + '</span>';
13
+ return '<span class="most-used-tag">' + tag + '</span>';
14
14
  }).join(', ');
15
15
 
16
- var $mostUsedTagsContainer = $(e.target).parent('.most_used_tags');
16
+ var $mostUsedTagsContainer = $(e.target).parent('.most-used-tags');
17
17
  $mostUsedTagsContainer.empty();
18
18
  $mostUsedTagsContainer.append(tagsHtml);
19
19
  });
@@ -1,10 +1,8 @@
1
- /* stylelint-disable font-family-no-missing-generic-family-keyword */
2
-
3
1
  #admin-menu a.additional-tags::before {
4
- font-family: Font Awesome\ 5 Free;
2
+ font-family: 'Font Awesome 5 Free';
5
3
  font-size: 1.2em;
6
4
  font-weight: 900;
7
- content: "\f02c"; /* fas fa-tags */
5
+ content: '\f02c'; /* fas fa-tags */
8
6
  padding-right: 4px;
9
7
  }
10
8
 
@@ -33,6 +31,7 @@ span.additional-tag-label-color {
33
31
  td.tags span.additional-tag-label-color {
34
32
  display: inline-block;
35
33
  line-height: normal;
34
+ white-space: nowrap;
36
35
  margin: 2px !important;
37
36
  }
38
37
 
@@ -40,7 +39,7 @@ td.tags span.additional-tag-label-color {
40
39
  padding: 0 5px;
41
40
  line-height: initial;
42
41
  font-size: 0.7rem !important;
43
- border: 1px solid rgba(0, 0, 0, 0.2);
42
+ border: 1px solid rgb(0 0 0 / 20%);
44
43
  border-radius: 0.75rem;
45
44
  }
46
45
 
@@ -65,11 +64,36 @@ td.tags span.additional-tag-label-color {
65
64
  }
66
65
 
67
66
  .additional-tag-label-color .tag-count,
68
- .tag-label .tag-count {
67
+ .tag-label .tag-count,
68
+ .additional-tag-label-color .tag-group-value,
69
+ .tag-label .tag-group-value {
69
70
  font-size: 0.7rem;
70
71
  margin-left: 0.5em;
71
72
  }
72
73
 
74
+ .additional-tag-label-color .tag-group-value {
75
+ display: inline-block;
76
+ background: #eee;
77
+ color: #1f1f1f;
78
+ padding-right: 5px;
79
+ margin-right: -5px;
80
+ padding-left: 3px;
81
+ }
82
+
83
+ .additional-tag-label-color .tag-group-value.tag-group-nocount {
84
+ border-top-right-radius: 0.7rem;
85
+ border-bottom-right-radius: 0.7rem;
86
+ }
87
+
88
+ .tag-label .tag-group-value {
89
+ background: #eee;
90
+ border-radius: 5px;
91
+ padding: 0 5px;
92
+ color: #666;
93
+ border: 1px solid #ddd;
94
+ vertical-align: middle;
95
+ }
96
+
73
97
  span.additional-tag-label-color:hover a,
74
98
  .tag-label .tag-count:hover a {
75
99
  text-decoration: none !important;
@@ -84,25 +108,21 @@ span.additional-tag-label-color:hover a,
84
108
  height: 22px;
85
109
  }
86
110
 
87
- #edit_tags_form.box { margin: 1px 5px 0 0; }
111
+ #edit-tags-form.box { margin: 1px 5px 0 0; }
88
112
 
89
- #edit_tags_form.box label {
113
+ #edit-tags-form.box label {
90
114
  margin-right: 5px;
91
115
  font-weight: bold;
92
116
  }
93
117
 
94
- #edit_tags_form.box #contact_tags {
95
- margin-bottom: 10px;
96
- }
97
-
98
118
  div#tags-data span.contextual {
99
119
  float: none;
100
120
  padding-left: 0;
101
121
  }
102
122
 
103
- #edit_tags_link { opacity: 0; }
123
+ #edit-tags-link { opacity: 0; }
104
124
 
105
- #tags-data:hover #edit_tags_link { opacity: 1; }
125
+ #tags-data:hover #edit-tags-link { opacity: 1; }
106
126
 
107
127
  #sidebar ul.tags-cloud li.letter {
108
128
  border-bottom: 1px dotted;
@@ -110,12 +130,12 @@ div#tags-data span.contextual {
110
130
  font-weight: bold;
111
131
  }
112
132
 
113
- .most_used_tag {
133
+ .most-used-tag {
114
134
  cursor: pointer;
115
135
  color: #169;
116
136
  }
117
137
 
118
- .most_used_tag:hover { text-decoration: underline; }
138
+ .most-used-tag:hover { text-decoration: underline; }
119
139
 
120
140
  div.wiki-attributes .attribute {
121
141
  padding-left: 50px;
@@ -131,3 +151,8 @@ div.wiki-attributes .attribute .label {
131
151
  overflow: hidden;
132
152
  text-overflow: ellipsis;
133
153
  }
154
+
155
+ /* Fix for redmine_checklists: without this, context menu of checklist is behind tag input field */
156
+ #checklist-menu {
157
+ z-index: 1;
158
+ }
@@ -1,38 +1,45 @@
1
1
  bg:
2
+ activerecord:
3
+ errors:
4
+ messages:
5
+ invalid_mutually_exclusive_tags: "Използва взаимно изключващи се етикети"
6
+ field_issue_tags: Issue tags
2
7
  field_tag_list: Маркери
3
8
  field_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} с тегами"
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_color_theme: "Цвят"
22
+ label_tags_sidebar: "Показване на маркерите в страничния панел"
23
+ label_tags_sort_by: "Сортиране на маркерите по"
24
+ label_tags_suggestion_order: "Ред на предлагане"
13
25
  label_tags_tag: "Маркер"
26
+ label_tags_without_color: "Без цвят"
14
27
  label_use_colors: "Използване на цветове"
15
- label_wiki_index_for_tag_html: "Wiki страници с маркер <em>%{tag}</em>"
28
+ label_wiki_index_for_tag: "Wiki страници с маркер"
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: "Теги Сумма"
37
- label_amount_entities_with_tags: "Сумма %{name} с тегами"
38
- label_quantity: "Количество"
@@ -1,38 +1,45 @@
1
1
  cs:
2
+ activerecord:
3
+ errors:
4
+ messages:
5
+ invalid_mutually_exclusive_tags: "používá vzájemně se vylučující značky"
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: "Aktivujte značky problému"
6
10
  label_active_wiki_tags: "Aktivujte značky wiki"
7
11
  label_add_tags: "Přidat štítky"
12
+ label_amount_entities_with_tags: "Částka %{name} s TAGy"
13
+ label_amount_tags: "Částka TAGy"
8
14
  label_edit_tags: "Upravit značky"
9
15
  label_manage_tags: "Spravovat štítky"
10
16
  label_merge_selected_tags: "Sloučit vybrané značky"
11
17
  label_open_issues_only: "Zobrazit pouze otevřené problémy"
18
+ label_quantity: "Množství"
12
19
  label_show_with_count: "Zobrazit částku na značce"
20
+ label_tag_color_theme: "Barevné téma %{value}"
21
+ label_tags_color_theme: "Barva"
22
+ label_tags_sidebar: "Zobrazit značky na postranním panelu jako"
23
+ label_tags_sort_by: "Řazení značek podle"
24
+ label_tags_suggestion_order: "Objednávka návrhu"
13
25
  label_tags_tag: "Tag"
14
- label_use_colors: "Použijte barvy"
15
- label_wiki_index_for_tag_html: "Wiki stránky se značkou <em>%{tag}</em>"
26
+ label_tags_without_color: "Bez barvy"
27
+ label_use_colors: "Použít barvy"
28
+ label_wiki_index_for_tag: "Wiki stránky se značkou"
29
+ label_with_chart: "S grafem"
30
+ label_with_table_of_values: "S tabulkou hodnot"
16
31
  notice_failed_to_add_tags: "Přidání značek se nezdařilo"
17
32
  notice_tags_added: "Přidány značky"
18
33
  permission_add_wiki_tags: "Přidejte značky wiki"
19
34
  permission_create_issue_tags: "Přidejte značky problému"
20
35
  permission_edit_issue_tags: "Upravte značky problému"
21
36
  permission_view_issue_tags: "Zobrazit značky problémů"
22
- tags_order_by_last_created: "Naposledy vytvořeno"
23
37
  tags_order_by_count: "Nejvíc používaný"
38
+ tags_order_by_last_created: "Naposledy vytvořeno"
24
39
  tags_order_by_name: "Název"
25
40
  tags_sidebar_cloud: "Cloud"
26
41
  tags_sidebar_list: "Seznam"
27
42
  tags_sidebar_none: "Žádný"
28
43
  tags_sidebar_simple_cloud: "Simple cloud"
29
- label_tags_sidebar: "Zobrazit značky na postranním panelu jako"
30
44
  tags_sort_by_count: "Počet"
31
45
  tags_sort_by_name: "Název"
32
- label_tags_sort_by: "Řazení značek podle"
33
- label_tags_suggestion_order: "Objednávka návrhu"
34
- label_with_table_of_values: "S tabulkou hodnot"
35
- label_with_chart: "S grafem"
36
- label_amount_tags: "Částka TAGy"
37
- label_amount_entities_with_tags: "Částka %{name} s TAGy"
38
- label_quantity: "Množství"