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.
- checksums.yaml +4 -4
- data/.github/workflows/codeql-analysis.yml +6 -6
- data/.github/workflows/linters.yml +16 -4
- data/.github/workflows/tests.yml +7 -4
- data/.gitignore +3 -0
- data/.rubocop.yml +9 -6
- data/.stylelintrc.json +12 -155
- data/README.md +28 -9
- data/app/controllers/additional_tags_controller.rb +10 -10
- 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 +16 -10
- data/app/jobs/additional_tags_remove_unused_tag_job.rb +11 -6
- data/app/models/additional_tag.rb +98 -0
- data/app/views/additional_tags/_tag_list.html.slim +12 -6
- 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 +9 -7
- data/app/views/issue_tags/_edit_modal.html.slim +7 -7
- data/app/views/issue_tags/edit.js.erb +1 -1
- data/app/views/issues/_tags.html.slim +12 -7
- data/app/views/issues/_tags_bulk_edit.html.slim +2 -1
- data/app/views/issues/_tags_form_details.html.slim +1 -2
- data/app/views/wiki/_tags_form.html.slim +4 -0
- data/app/views/wiki/_tags_form_bottom.html.slim +1 -2
- data/app/views/wiki/_tags_show.html.slim +7 -7
- data/app/views/wiki/tag_index.html.slim +2 -2
- 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 +23 -2
- data/lib/additional_tags/patches/wiki_page_patch.rb +8 -2
- data/lib/additional_tags/plugin_version.rb +1 -1
- data/lib/additional_tags/tags.rb +35 -14
- data/lib/additional_tags.rb +5 -0
- data/package.json +8 -0
- 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: "$('#
|
19
|
-
id: '
|
18
|
+
onclick: "$('#edit-tags-form').show(); $('#tags-data').hide(); return false;",
|
19
|
+
id: 'edit-tags-link'
|
20
20
|
|
21
|
-
#
|
21
|
+
#edit-tags-form.hidden
|
22
22
|
= form_tag update_url, method: :put do
|
23
|
-
= render
|
24
|
-
|
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: "$('#
|
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,
|
@@ -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
|
-
=
|
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
|
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
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
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 :
|
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.
|
24
|
-
= safe_join @most_used_tags.collect { |t| tag.span t.name, class: '
|
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(
|
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
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
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 =
|
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
|
@@ -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
|
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
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
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
|
21
|
+
= render 'sidebar'
|
data/assets/javascripts/tags.js
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
/* global mostUsedTags:writable */
|
2
2
|
$(function() {
|
3
|
-
$('body').on('click', '.
|
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="
|
13
|
+
return '<span class="most-used-tag">' + tag + '</span>';
|
14
14
|
}).join(', ');
|
15
15
|
|
16
|
-
var $mostUsedTagsContainer = $(e.target).parent('.
|
16
|
+
var $mostUsedTagsContainer = $(e.target).parent('.most-used-tags');
|
17
17
|
$mostUsedTagsContainer.empty();
|
18
18
|
$mostUsedTagsContainer.append(tagsHtml);
|
19
19
|
});
|
data/assets/stylesheets/tags.css
CHANGED
@@ -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
|
2
|
+
font-family: 'Font Awesome 5 Free';
|
5
3
|
font-size: 1.2em;
|
6
4
|
font-weight: 900;
|
7
|
-
content:
|
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
|
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
|
-
#
|
111
|
+
#edit-tags-form.box { margin: 1px 5px 0 0; }
|
88
112
|
|
89
|
-
#
|
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
|
-
#
|
123
|
+
#edit-tags-link { opacity: 0; }
|
104
124
|
|
105
|
-
#tags-data:hover #
|
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
|
-
.
|
133
|
+
.most-used-tag {
|
114
134
|
cursor: pointer;
|
115
135
|
color: #169;
|
116
136
|
}
|
117
137
|
|
118
|
-
.
|
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
|
+
}
|
data/config/locales/bg.yml
CHANGED
@@ -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
|
-
|
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: "Количество"
|
data/config/locales/cs.yml
CHANGED
@@ -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
|
-
|
15
|
-
|
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í"
|