additional_tags 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (94) hide show
  1. checksums.yaml +7 -0
  2. data/.github/workflows/brakeman.yml +38 -0
  3. data/.github/workflows/linters.yml +41 -0
  4. data/.github/workflows/tests.yml +139 -0
  5. data/.gitignore +8 -0
  6. data/.rubocop.yml +75 -0
  7. data/.slim-lint.yml +25 -0
  8. data/.stylelintrc.json +163 -0
  9. data/LICENSE +339 -0
  10. data/README.md +126 -0
  11. data/Rakefile +11 -0
  12. data/additional_tags.gemspec +28 -0
  13. data/app/controllers/additional_tags_controller.rb +80 -0
  14. data/app/controllers/issue_tags_controller.rb +48 -0
  15. data/app/helpers/additional_tags_helper.rb +197 -0
  16. data/app/helpers/additional_tags_issues_helper.rb +43 -0
  17. data/app/helpers/additional_tags_wiki_helper.rb +17 -0
  18. data/app/jobs/additional_tags_job.rb +3 -0
  19. data/app/jobs/additional_tags_remove_unused_tag_job.rb +5 -0
  20. data/app/models/migrate_tag.rb +4 -0
  21. data/app/models/migrate_tagging.rb +5 -0
  22. data/app/views/additional_tags/_html_head.html.slim +6 -0
  23. data/app/views/additional_tags/_tag_list.html.slim +35 -0
  24. data/app/views/additional_tags/context_menu.html.slim +16 -0
  25. data/app/views/additional_tags/edit.html.slim +14 -0
  26. data/app/views/additional_tags/merge.html.slim +17 -0
  27. data/app/views/additional_tags/settings/_general.html.slim +45 -0
  28. data/app/views/additional_tags/settings/_manage_tags.html.slim +35 -0
  29. data/app/views/additional_tags/settings/_settings.html.slim +9 -0
  30. data/app/views/auto_completes/_additional_tag_list.slim +1 -0
  31. data/app/views/context_menus/_issues_tags.html.slim +10 -0
  32. data/app/views/issue_tags/_edit_modal.html.slim +30 -0
  33. data/app/views/issue_tags/edit.js.erb +2 -0
  34. data/app/views/issues/_tags.html.slim +8 -0
  35. data/app/views/issues/_tags_bulk_edit.html.slim +7 -0
  36. data/app/views/issues/_tags_form.html.slim +11 -0
  37. data/app/views/issues/_tags_form_details.html.slim +7 -0
  38. data/app/views/issues/_tags_sidebar.html.slim +5 -0
  39. data/app/views/reports/_tags_simple.html.slim +11 -0
  40. data/app/views/wiki/_tags_form.html.slim +7 -0
  41. data/app/views/wiki/_tags_form_bottom.html.slim +5 -0
  42. data/app/views/wiki/_tags_show.html.slim +9 -0
  43. data/app/views/wiki/_tags_sidebar.html.slim +4 -0
  44. data/app/views/wiki/tag_index.html.slim +21 -0
  45. data/assets/javascripts/tags.js +19 -0
  46. data/assets/stylesheets/tags.css +119 -0
  47. data/config/locales/bg.yml +33 -0
  48. data/config/locales/cs.yml +33 -0
  49. data/config/locales/de.yml +33 -0
  50. data/config/locales/en.yml +33 -0
  51. data/config/locales/es.yml +33 -0
  52. data/config/locales/fr.yml +33 -0
  53. data/config/locales/it.yml +33 -0
  54. data/config/locales/ja.yml +33 -0
  55. data/config/locales/ko.yml +33 -0
  56. data/config/locales/pl.yml +33 -0
  57. data/config/locales/pt-BR.yml +33 -0
  58. data/config/locales/ru.yml +33 -0
  59. data/config/routes.rb +31 -0
  60. data/config/settings.yml +9 -0
  61. data/db/migrate/20201116145429_acts_as_taggable_migration.rb +40 -0
  62. data/db/migrate/20201123093214_migrate_existing_tags.rb +39 -0
  63. data/doc/images/additional-tags-framework.png +0 -0
  64. data/doc/images/additional-tags.gif +0 -0
  65. data/init.rb +31 -0
  66. data/lib/additional_tags.rb +107 -0
  67. data/lib/additional_tags/hooks.rb +63 -0
  68. data/lib/additional_tags/patches/agile_boards_controller_patch.rb +14 -0
  69. data/lib/additional_tags/patches/agile_query_patch.rb +41 -0
  70. data/lib/additional_tags/patches/agile_versions_controller_patch.rb +14 -0
  71. data/lib/additional_tags/patches/agile_versions_query_patch.rb +11 -0
  72. data/lib/additional_tags/patches/auto_completes_controller_patch.rb +42 -0
  73. data/lib/additional_tags/patches/calendars_controller_patch.rb +14 -0
  74. data/lib/additional_tags/patches/dashboard_async_blocks_controller_patch.rb +11 -0
  75. data/lib/additional_tags/patches/dashboards_controller_patch.rb +11 -0
  76. data/lib/additional_tags/patches/gantts_controller_patch.rb +14 -0
  77. data/lib/additional_tags/patches/imports_controller_patch.rb +12 -0
  78. data/lib/additional_tags/patches/issue_patch.rb +95 -0
  79. data/lib/additional_tags/patches/issue_query_patch.rb +55 -0
  80. data/lib/additional_tags/patches/issues_controller_patch.rb +14 -0
  81. data/lib/additional_tags/patches/journal_patch.rb +18 -0
  82. data/lib/additional_tags/patches/my_controller_patch.rb +14 -0
  83. data/lib/additional_tags/patches/queries_helper_patch.rb +40 -0
  84. data/lib/additional_tags/patches/reports_controller_patch.rb +32 -0
  85. data/lib/additional_tags/patches/settings_controller_patch.rb +12 -0
  86. data/lib/additional_tags/patches/time_entry_patch.rb +19 -0
  87. data/lib/additional_tags/patches/time_entry_query_patch.rb +53 -0
  88. data/lib/additional_tags/patches/time_report_patch.rb +46 -0
  89. data/lib/additional_tags/patches/timelog_controller_patch.rb +14 -0
  90. data/lib/additional_tags/patches/wiki_controller_patch.rb +63 -0
  91. data/lib/additional_tags/patches/wiki_page_patch.rb +39 -0
  92. data/lib/additional_tags/tags.rb +134 -0
  93. data/lib/additional_tags/version.rb +3 -0
  94. metadata +177 -0
@@ -0,0 +1,5 @@
1
+ class MigrateTagging < ActiveRecord::Base
2
+ self.table_name = 'taggings'
3
+ belongs_to :migrate_tag, foreign_key: :tag_id, inverse_of: :migrate_taggings
4
+ belongs_to :taggable, polymorphic: true
5
+ end
@@ -0,0 +1,6 @@
1
+ = stylesheet_link_tag 'tags', plugin: 'additional_tags'
2
+ = javascript_include_tag 'tags', plugin: 'additional_tags'
3
+ - if User.current.allowed_to?(:edit_issue_tags, @project, global: true) || \
4
+ User.current.allowed_to?(:create_issue_tags, @project, global: true) || \
5
+ User.current.allowed_to?(:add_wiki_tags, @project, global: true)
6
+ = additionals_library_load :select2
@@ -0,0 +1,35 @@
1
+ - if defined?(show_always) && show_always || entry.tag_list.present?
2
+ .tags.attribute
3
+ - unless defined? hide_label
4
+ span.label
5
+ = l(:field_tag_list)
6
+ ' :
7
+ - if defined?(editable) && editable
8
+ #tags-data
9
+ = additional_tag_links entry.tags,
10
+ project: @project,
11
+ unsorted: defined?(unsorted) ? unsorted : false,
12
+ link_wiki_tag: defined?(link_wiki_tag) ? link_wiki_tag : false,
13
+ use_colors: defined?(use_colors) ? use_colors : true
14
+ '
15
+ span.contextual
16
+ = link_to l(:label_edit_tags),
17
+ {},
18
+ onclick: "$('#edit_tags_form').show(); $('#tags-data').hide(); return false;",
19
+ id: 'edit_tags_link'
20
+
21
+ #edit_tags_form style="display: none;"
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 }
25
+ '
26
+ = submit_tag l(:button_save), class: 'button-small'
27
+ '
28
+ = link_to l(:button_cancel), {}, onclick: "$('#edit_tags_form').hide(); $('#tags-data').show(); return false;"
29
+
30
+ - else
31
+ = additional_tag_links entry.tags,
32
+ project: @project,
33
+ unsorted: defined?(unsorted) ? unsorted : false,
34
+ link_wiki_tag: defined?(link_wiki_tag) ? link_wiki_tag : false,
35
+ use_colors: defined?(use_colors) ? use_colors : true
@@ -0,0 +1,16 @@
1
+ ul
2
+ - if @tag
3
+ li
4
+ = link_to l(:button_edit),
5
+ edit_additional_tag_path(@tag),
6
+ class: 'icon icon-edit'
7
+ - else
8
+ li
9
+ = link_to l(:button_merge),
10
+ merge_additional_tags_path(ids: @tags.collect(&:id)),
11
+ class: 'icon icon-tags-merge'
12
+ li
13
+ = link_to l(:button_delete),
14
+ additional_tags_path(ids: @tags.collect(&:id), back_url: @back),
15
+ method: :delete, data: { confirm: l(:text_are_you_sure) },
16
+ class: 'icon icon-del'
@@ -0,0 +1,14 @@
1
+ h2
2
+ = link_to l(:label_manage_tags), @tag_list_path
3
+ '
4
+ = Additionals::LIST_SEPARATOR
5
+ = h "#{l :label_tags_tag}: #{@tag.name}"
6
+
7
+ = form_tag additional_tag_path(@tag, tab: 'tags'), class: 'tabular', method: :put do
8
+ = error_messages_for 'tag'
9
+ .box
10
+ p
11
+ label[for="tag_name"]
12
+ = l :field_name
13
+ = text_field 'tag', 'name'
14
+ = submit_tag l(:button_save)
@@ -0,0 +1,17 @@
1
+ h2
2
+ = link_to l(:label_manage_tags), @tag_list_path
3
+ '
4
+ = Additionals::LIST_SEPARATOR
5
+ = l :label_merge_selected_tags
6
+
7
+ = form_tag merge_additional_tags_path(ids: @tags.map(&:id)), class: 'tabular' do
8
+ = error_messages_for 'tag'
9
+ = additional_tag_links @tags, { show_count: true,
10
+ use_colors: AdditionalTags.setting?(:use_colors),
11
+ link: '#' }
12
+ .box
13
+ p
14
+ label[for="tag_name"]
15
+ = l :field_name
16
+ = text_field 'tag', 'name', value: @tags.first.name
17
+ = submit_tag l(:button_save)
@@ -0,0 +1,45 @@
1
+ fieldset.settings
2
+ legend = l :label_general
3
+
4
+ p
5
+ = label_tag 'settings[tags_sidebar]', l(:tags_sidebar)
6
+ = select_tag 'settings[tags_sidebar]',
7
+ options_for_select(%w[none list cloud simple_cloud].collect { |v| [l("tags_sidebar_#{v}"), v] },
8
+ @settings[:tags_sidebar])
9
+
10
+ p
11
+ = additionals_settings_checkbox :show_with_count
12
+
13
+ p
14
+ = label_tag 'settings[tags_sort_by]', l(:tags_sort_by)
15
+ = select_tag 'settings[tags_sort_by]',
16
+ options_for_select(%w[name count].collect { |v| [l("tags_sort_by_#{v}"), v] },
17
+ @settings[:tags_sort_by])
18
+ '
19
+ = select_tag 'settings[tags_sort_order]',
20
+ options_for_select([[l(:label_ascending), 'asc'], [l(:label_descending), 'desc']],
21
+ @settings[:tags_sort_order])
22
+
23
+ p
24
+ = label_tag 'settings[tags_suggestion_order]', l(:tags_suggestion_order)
25
+ = select_tag 'settings[tags_suggestion_order]',
26
+ options_for_select(%w[name last_created count].collect { |v| [l("tags_order_by_#{v}"), v] },
27
+ @settings['tags_suggestion_order'])
28
+
29
+ p
30
+ = additionals_settings_checkbox :use_colors
31
+
32
+ fieldset.settings
33
+ legend = l :label_issue_plural
34
+
35
+ p
36
+ = additionals_settings_checkbox :active_issue_tags
37
+
38
+ p
39
+ = additionals_settings_checkbox :open_issues_only
40
+
41
+ fieldset.settings
42
+ legend = l :label_wiki
43
+
44
+ p
45
+ = additionals_settings_checkbox :active_wiki_tags
@@ -0,0 +1,35 @@
1
+ - tags = manageable_tags
2
+ - if tags.present?
3
+ table.list.issues
4
+ thead
5
+ tr
6
+ th.checkbox.hide-when-print
7
+ = check_box_tag 'ids[]', '', false, class: 'toggle-selection',
8
+ title: "#{l :button_check_all}/#{l :button_uncheck_all}"
9
+
10
+ th = l :field_name
11
+ - manageable_tag_columns.each do |_column, column_values|
12
+ th = column_values[:label]
13
+ th
14
+ tbody
15
+ - tags.each do |tag|
16
+ tr.hascontextmenu id="#{tag.id}"
17
+ td.checkbox.hide-when-print
18
+ = check_box_tag('ids[]', tag.id, false, id: nil)
19
+ td = additional_tag_link tag, link: edit_additional_tag_path(tag)
20
+ - manageable_tag_column_values(tag).each do |column|
21
+ td = column
22
+ td.buttons
23
+ = link_to l(:button_edit), edit_additional_tag_path(tag),
24
+ class: 'icon icon-edit'
25
+ = link_to l(:button_delete), additional_tags_path(ids: tag), method: :delete,
26
+ data: { confirm: l(:text_are_you_sure) }, class: 'icon icon-del'
27
+ - else
28
+ p.nodata = l :label_no_data
29
+
30
+ javascript:
31
+ $(document).ready(function(){
32
+ $('#settings form').data('cmUrl', "#{context_menu_additional_tags_path}")
33
+ })
34
+
35
+ = context_menu
@@ -0,0 +1,9 @@
1
+ - tags_tabs = [{ name: 'general',
2
+ partial: 'additional_tags/settings/general',
3
+ label: :label_general },
4
+ { name: 'manage_tags',
5
+ partial: 'additional_tags/settings/manage_tags',
6
+ label: :label_manage_tags }]
7
+
8
+ - html_title l(:label_settings), l(:field_tags)
9
+ = render_tabs tags_tabs
@@ -0,0 +1 @@
1
+ == @tags.collect { |tag| { 'id' => tag.name, 'text' => tag.name } }.to_json
@@ -0,0 +1,10 @@
1
+ - if AdditionalTags.setting?(:active_issue_tags) && User.current.allowed_to?(:edit_issue_tags, @projects || @project)
2
+ li.folder
3
+ a.submenu[href="#"]
4
+ = l :field_tags
5
+ ul
6
+ li
7
+ = context_menu_link l(:button_add),
8
+ edit_issue_tags_path(ids: @issue_ids),
9
+ remote: true,
10
+ class: 'icon icon-add'
@@ -0,0 +1,30 @@
1
+ h3.title = l :label_add_tags
2
+
3
+ - if @is_bulk_editing
4
+ h3 = l :label_bulk_edit_selected_issues
5
+ ul
6
+ - @issues.each do |issue|
7
+ li = link_to_issue issue
8
+ - else
9
+ h3
10
+ span = link_to_issue @issues.first
11
+
12
+ = form_tag issue_tags_path(ids: @issue_ids) do
13
+ fieldset.box
14
+ legend = l :field_tags
15
+ #issue_tags
16
+ = additionals_select2_tag 'issue[tag_list]',
17
+ options_for_select(@issue_tags.map { |tag| [tag, tag] }, @issue_tags),
18
+ multiple: true,
19
+ style: 'width: 100%;',
20
+ url: issue_tags_auto_completes_path(project_id: @project),
21
+ placeholder: @is_bulk_editing ? t(:label_no_change_option) : '+ add tag',
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') }, ', '
25
+ = javascript_tag "var mostUsedTags = #{@most_used_tags.map(&:name)}"
26
+
27
+ .buttons
28
+ = submit_tag l(:button_add), name: nil
29
+ '
30
+ = submit_tag l(:button_cancel), name: nil, onclick: 'hideModal(this);', type: 'button'
@@ -0,0 +1,2 @@
1
+ $('#ajax-modal').html('<%= escape_javascript(render partial: 'issue_tags/edit_modal') %>');
2
+ showModal('ajax-modal', '600px');
@@ -0,0 +1,8 @@
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) }
@@ -0,0 +1,7 @@
1
+ - tags = defined?(form) ? form.object.tag_list : []
2
+ = additionals_select2_tag 'issue[tag_list]',
3
+ options_for_select(tags.map { |tag| [tag, tag] }, tags),
4
+ multiple: true,
5
+ url: issue_tags_auto_completes_path,
6
+ placeholder: l(:label_add_tags),
7
+ tags: true
@@ -0,0 +1,11 @@
1
+ - project = defined?(project) ? project : @project
2
+ - options = { multiple: true,
3
+ width: '95%',
4
+ url: issue_tags_auto_completes_path(project_id: project),
5
+ placeholder: l(:label_add_tags),
6
+ tags: true }
7
+ - options[:id] = css_id if defined? css_id
8
+
9
+ = additionals_select2_tag 'issue[tag_list]',
10
+ options_for_select(@issue.tag_list.map { |tag| [tag, tag] }, @issue.tag_list),
11
+ options
@@ -0,0 +1,7 @@
1
+ - project = @issue&.project || @projects || @project
2
+ - if AdditionalTags.setting?(:active_issue_tags) && User.current.allowed_to?(:edit_issue_tags, project)
3
+ div
4
+ p#issue_tags
5
+ = label_tag l(:field_tag_list)
6
+ = render partial: tags_form,
7
+ locals: { project: project }
@@ -0,0 +1,5 @@
1
+ - if AdditionalTags.setting?(:active_issue_tags) && \
2
+ User.current.allowed_to?(:view_issue_tags, @project, global: true) && sidebar_tags.present?
3
+ .sidebar-tags
4
+ h3 = l :field_tags
5
+ = render_sidebar_tags
@@ -0,0 +1,11 @@
1
+ - if AdditionalTags.setting?(:active_issue_tags) && User.current.allowed_to?(:view_issue_tags, @project)
2
+ h3
3
+ = l :field_tags
4
+ |  
5
+ = link_to l(:label_details),
6
+ project_issues_report_details_path(@project, detail: 'tag'),
7
+ class: 'icon-only icon-zoom-in',
8
+ title: l(:label_details)
9
+
10
+ = render partial: 'simple',
11
+ locals: { data: @issues_by_tags, field_name: 'tag_id', rows: @tags }
@@ -0,0 +1,7 @@
1
+ = additionals_select2_tag 'wiki_page[tag_list]',
2
+ options_for_select(@page.tag_list.map { |tag| [tag, tag] }, @page.tag_list),
3
+ multiple: true,
4
+ width: '95%',
5
+ url: wiki_tags_auto_completes_path(project_id: @project),
6
+ placeholder: l(:label_add_tags),
7
+ tags: true
@@ -0,0 +1,5 @@
1
+ - if AdditionalTags.setting?(:active_wiki_tags) && User.current.allowed_to?(:add_wiki_tags, @project)
2
+ p#wiki_tags
3
+ = label_tag l(:field_tag_list)
4
+ = render partial: 'wiki/tags_form',
5
+ locals: { project: project, page: page }
@@ -0,0 +1,9 @@
1
+ - if AdditionalTags.setting? :active_wiki_tags
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) }
@@ -0,0 +1,4 @@
1
+ - if AdditionalTags.setting?(:active_wiki_tags) && sidebar_tags.present?
2
+ .sidebar-tags
3
+ h3 = l :field_tags
4
+ = render_sidebar_tags
@@ -0,0 +1,21 @@
1
+ .contextual
2
+ - if User.current.allowed_to? :edit_wiki_pages, @project
3
+ = link_to l(:label_wiki_page_new), new_project_wiki_page_path(@project), remote: true, class: 'icon icon-add'
4
+
5
+ h2 = l :label_wiki_index_for_tag, @tag
6
+
7
+ - if @pages.empty?
8
+ p.nodata = l :label_no_data
9
+ - else
10
+ ul.wiki-tag-entries
11
+ - @pages.each do |page|
12
+ li
13
+ = link_to page.pretty_title, project_wiki_page_path(@project, page.title)
14
+ - if page.parent.present?
15
+ p.parent
16
+ = l :field_parent_title
17
+ ' :
18
+ = link_to page.parent.pretty_title, project_wiki_page_path(@project, page.parent.title)
19
+
20
+ - content_for :sidebar do
21
+ = render partial: 'sidebar'
@@ -0,0 +1,19 @@
1
+ $(function () {
2
+ $('body').on('click', '.most_used_tags .most_used_tag', function (e) {
3
+ var $tagsSelect = $('select#issue_tag_list');
4
+ var tag = e.target.innerText;
5
+ if ($tagsSelect.find("option[value='" + tag + "']").length === 0) {
6
+ var newOption = new Option(tag, tag, true, true);
7
+ $tagsSelect.append(newOption).trigger("change");
8
+ }
9
+
10
+ mostUsedTags = $.grep(mostUsedTags, function(t) { return t != tag; });
11
+ var tagsHtml = mostUsedTags.map(function(tag) {
12
+ return '<span class="most_used_tag">' + tag + '</span>';
13
+ }).join(', ');
14
+
15
+ var $mostUsedTagsContainer = $(e.target).parent('.most_used_tags');
16
+ $mostUsedTagsContainer.empty();
17
+ $mostUsedTagsContainer.append(tagsHtml);
18
+ });
19
+ });
@@ -0,0 +1,119 @@
1
+ /* stylelint-disable font-family-no-missing-generic-family-keyword */
2
+
3
+ #admin-menu a.tags::before {
4
+ font-family: Font Awesome\ 5 Free;
5
+ font-size: 1.2em;
6
+ font-weight: 900;
7
+ content: "\f02c"; /* fas fa-tags */
8
+ padding-right: 4px;
9
+ }
10
+
11
+ #admin-menu a.tags {
12
+ padding-left: 0;
13
+ }
14
+
15
+ /* Mobile menu style FontAwesome icon */
16
+ .flyout-is-active #admin-menu li a.tags {
17
+ padding-left: 8px !important;
18
+ }
19
+
20
+ ul.tags {
21
+ list-style: none;
22
+ padding: 0;
23
+ }
24
+
25
+ ul.tags li { margin: 0.25em 0; }
26
+
27
+ span.additional-tag-label-color {
28
+ display: inline-block;
29
+ margin-bottom: 5px !important;
30
+ border-radius: 2px !important;
31
+ }
32
+
33
+ td.tags span.additional-tag-label-color {
34
+ display: inline-block;
35
+ line-height: normal;
36
+ margin: 2px !important;
37
+ }
38
+
39
+ .additional-tag-label-color {
40
+ padding: 2px 4px;
41
+ font-size: 10px !important;
42
+ border: 1px solid rgba(0, 0, 0, 0.2);
43
+ border-radius: 2px;
44
+ }
45
+
46
+ .additional-tag-label-color a::before {
47
+ font-family: Font Awesome\ 5 Free;
48
+ font-size: 0.9em;
49
+ font-weight: 900;
50
+ content: "\f02b"; /* fas fa-tag */
51
+ padding-right: 3px;
52
+ }
53
+
54
+ .additional-tag-label-color .tag-count,
55
+ .tag-label .tag-count {
56
+ font-size: 0.75em;
57
+ margin-left: 0.5em;
58
+ }
59
+
60
+ span.additional-tag-label-color:hover a {
61
+ text-decoration: none !important;
62
+ }
63
+
64
+ .flyout-menu div.sidebar-tags h3 {
65
+ margin-left: -8px;
66
+ }
67
+
68
+ .flyout-menu div.sidebar-tags ul.tags-cloud li a {
69
+ line-height: 22px;
70
+ height: 22px;
71
+ }
72
+
73
+ #edit_tags_form.box { margin: 1px 5px 0 0; }
74
+
75
+ #edit_tags_form.box label {
76
+ margin-right: 5px;
77
+ font-weight: bold;
78
+ }
79
+
80
+ #edit_tags_form.box #contact_tags {
81
+ margin-bottom: 10px;
82
+ }
83
+
84
+ div#tags-data span.contextual {
85
+ float: none;
86
+ padding-left: 0;
87
+ }
88
+
89
+ #edit_tags_link { opacity: 0; }
90
+
91
+ #tags-data:hover #edit_tags_link { opacity: 1; }
92
+
93
+ #sidebar ul.tags-cloud li.letter {
94
+ border-bottom: 1px dotted;
95
+ margin: 10px 30px 10px 0;
96
+ font-weight: bold;
97
+ }
98
+
99
+ .most_used_tag {
100
+ cursor: pointer;
101
+ color: #169;
102
+ }
103
+
104
+ .most_used_tag:hover { text-decoration: underline; }
105
+
106
+ div.wiki-attributes .attribute {
107
+ padding-left: 50px;
108
+ clear: left;
109
+ min-height: 1.8em;
110
+ }
111
+
112
+ div.wiki-attributes .attribute .label {
113
+ width: 45px;
114
+ margin-left: -50px;
115
+ font-weight: bold;
116
+ float: left;
117
+ overflow: hidden;
118
+ text-overflow: ellipsis;
119
+ }