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.
- 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í"
|