additional_tags 1.0.5 → 1.0.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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í"