additional_tags 1.0.7 → 3.1.0

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 (42) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +11 -10
  3. data/app/controllers/issue_tags_controller.rb +3 -0
  4. data/app/helpers/additional_tags_helper.rb +11 -2
  5. data/app/helpers/additional_tags_issues_helper.rb +12 -2
  6. data/app/views/additional_tags/settings/_manage_tags.html.slim +1 -1
  7. data/config/locales/bg.yml +0 -1
  8. data/config/locales/cs.yml +0 -1
  9. data/config/locales/de.yml +0 -1
  10. data/config/locales/en.yml +0 -1
  11. data/config/locales/es.yml +0 -1
  12. data/config/locales/fr.yml +0 -1
  13. data/config/locales/it.yml +0 -1
  14. data/config/locales/ja.yml +0 -1
  15. data/config/locales/ko.yml +0 -1
  16. data/config/locales/pl.yml +0 -1
  17. data/config/locales/pt-BR.yml +0 -1
  18. data/config/locales/ru.yml +0 -1
  19. data/db/migrate/20201123093214_migrate_existing_tags.rb +1 -1
  20. data/lib/additional_tags/hooks/view_hook.rb +13 -10
  21. data/lib/additional_tags/patches/auto_completes_controller_patch.rb +13 -11
  22. data/lib/additional_tags/patches/issue_patch.rb +4 -5
  23. data/lib/additional_tags/patches/queries_helper_patch.rb +13 -1
  24. data/lib/additional_tags/patches/query_patch.rb +2 -2
  25. data/lib/additional_tags/plugin_version.rb +1 -1
  26. data/lib/additional_tags/tags.rb +12 -4
  27. metadata +7 -50
  28. data/.eslintrc.yml +0 -17
  29. data/.github/workflows/codeql-analysis.yml +0 -70
  30. data/.github/workflows/linters.yml +0 -55
  31. data/.github/workflows/tests.yml +0 -137
  32. data/.gitignore +0 -13
  33. data/.rubocop.yml +0 -138
  34. data/.slim-lint.yml +0 -27
  35. data/.stylelintrc.json +0 -20
  36. data/Rakefile +0 -13
  37. data/additional_tags.gemspec +0 -32
  38. data/app/views/auto_completes/_additional_tag_list.slim +0 -1
  39. data/doc/images/additional-tags-framework.png +0 -0
  40. data/doc/images/additional-tags.gif +0 -0
  41. data/doc/images/tag-overview.png +0 -0
  42. data/package.json +0 -8
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d187e05dfc7655030d62f26afc35392085f43cbac4bb4b4d654da66c643cd58f
4
- data.tar.gz: 88901a08b7c4b38df8b65fd20282f5e4aae393866e5accf7c3a096d7c82f4788
3
+ metadata.gz: 30f90dcfc93dd66550bb8087b9f3a94fa411484f4876ccb9d837548edf0b64ae
4
+ data.tar.gz: df63312af11e2ce492b5b36bb3b0b1ce9f3e0b28c7d901512301226e06dcd65b
5
5
  SHA512:
6
- metadata.gz: 34e99763fad968c1f2498dc73b662fb756c4b436e0a4521acd731674c3bebdf8bee52cc55e995457908d39816b61a230fd29d4ac1f3a1662a3e12bb886e6d60e
7
- data.tar.gz: 4aeb8f7bcbaad55d596dd6f816cedbde29f1c707748ff9ce275f7f131959df258c10e2683ce279cf4c26f8a459d53992ae6e4202d9ff9963a637d88b85661c98
6
+ metadata.gz: 40e8517cddee11354aa8979506352abdbbb4e10774ce74f7f3d5c637b7bb2c03fd1fc75bd0e51f39ea23525aa8da2a54cb8089e3738b49d42718e5ea54031657
7
+ data.tar.gz: 429ea55984a5c3225db53f9a5699bf897a54ae09f9c4bf76fb24b5358702a6bb7547c9efba57938bfeb3c6e3b877f3ce7bffafef7069f645914d6b9b38f8f4a9
data/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # Additional Tags - Tags for Redmine
2
2
 
3
- [![Rate at redmine.org](https://img.shields.io/badge/rate%20at-redmine.org-blue.svg?style=flat)](https://www.redmine.org/plugins/additional_tags) [![Run Linters](https://github.com/AlphaNodes/additional_tags/workflows/Run%20Linters/badge.svg)](https://github.com/AlphaNodes/additional_tags/actions?query=workflow%3A%22Run+Linters%22) [![Run Tests](https://github.com/AlphaNodes/additional_tags/workflows/Tests/badge.svg)](https://github.com/AlphaNodes/additional_tags/actions?query=workflow%3ATests)
3
+ [![Rate at redmine.org](https://img.shields.io/badge/rate%20at-redmine.org-blue.svg?style=flat)](https://www.redmine.org/plugins/additional_tags) [![Run Linters](https://github.com/alphanodes/additional_tags/workflows/Run%20Linters/badge.svg)](https://github.com/alphanodes/additional_tags/actions?query=workflow%3A%22Run+Linters%22) [![Run Tests](https://github.com/alphanodes/additional_tags/workflows/Tests/badge.svg)](https://github.com/alphanodes/additional_tags/actions?query=workflow%3ATests)
4
4
 
5
5
  ## Features
6
6
 
@@ -8,15 +8,15 @@
8
8
  - *Activate issue tags* in the plugin configuration
9
9
  - and update your role permissions in the Redmine administration *Roles & permissions / Issue tracking*.
10
10
  - Tags for wiki pages. To use them you need to:
11
- - *Activate wiki tags* in the plugin configuration
11
+ - *Activate wiki tags* in the plugin configuration
12
12
  - and update your role permissions in the Redmine administration *Roles & permissions / Wiki*
13
- - Available role permissions for issue tags (section *Issue tracking*):
13
+ - Available role permissions for issue tags (section *Issue tracking*):
14
14
  - Add issue tags
15
15
  - Edit issue tags
16
16
  - Display issue tags
17
17
  - Available role permissions wiki tags (section *Wiki*):
18
18
  - Add wiki tags
19
- - Managing tags centrally in the plugin settings (edit, delete, merge)-
19
+ - Managing tags centrally in the plugin settings (edit, delete, merge)-
20
20
  - Grouped tags.
21
21
  - Grouping of tags possible, when using a colon in tag (all tags with same base name get the same color). Typo example: ``Plugin:HRM``
22
22
  - Scoped tags:
@@ -29,11 +29,11 @@
29
29
  used tags or tagging tables for issue or wiki tagging, tags will be migrated automatically there
30
30
  - Based on the very popular [acts-as-taggable-on](https://github.com/mbleigh/acts-as-taggable-on)
31
31
 
32
- ![screenshot](https://raw.githubusercontent.com/AlphaNodes/additional_tags/master/doc/images/tag-overview.png)
32
+ ![screenshot](https://raw.githubusercontent.com/alphanodes/additional_tags/master/doc/images/tag-overview.png)
33
33
 
34
34
  The screenshot shows: regular tags, grouped tags and scoped tags. The colors are assigned randomly. But you can change the color by choosing a *Color theme* in the plugin settings.
35
35
 
36
- ![screenshot](https://raw.githubusercontent.com/AlphaNodes/additional_tags/master/doc/images/additional-tags.gif)
36
+ ![screenshot](https://raw.githubusercontent.com/alphanodes/additional_tags/master/doc/images/additional-tags.gif)
37
37
 
38
38
  Other plugins use additional_tags as framework in order to support tags for their entities.
39
39
  At the moment this are:
@@ -42,11 +42,12 @@ At the moment this are:
42
42
  - redmine_passwords (password tagging)
43
43
  - redmine_reporting (project tagging)
44
44
  - redmine_hrm (holiday tagging)
45
- - redmine_servicedesk (contact tagging)
45
+ - redmine_servicedesk (tagging of contact, canned responses, invoices, helpdesk issues)
46
+ - redmine_wiki_guide (wiki page tagging)
46
47
 
47
48
  Start using it, too. The example image shows the centralized tag management in the plugin configuration.
48
49
 
49
- ![screenshot](https://raw.githubusercontent.com/AlphaNodes/additional_tags/master/doc/images/additional-tags-framework.png)
50
+ ![screenshot](https://raw.githubusercontent.com/alphanodes/additional_tags/master/doc/images/additional-tags-framework.png)
50
51
 
51
52
  ## Why another Tag plugin?
52
53
 
@@ -58,12 +59,12 @@ Start using it, too. The example image shows the centralized tag management in t
58
59
  ## Requirements
59
60
 
60
61
  - Redmine `>= 5.0`
61
- - Ruby `>= 2.7`
62
+ - Ruby `>= 3.0`
62
63
  - Redmine plugins: [additionals](https://www.redmine.org/plugins/additionals)
63
64
 
64
65
  ## Installing
65
66
 
66
- ### 1. Get right plugin version
67
+ ### 1. Get correct plugin version
67
68
 
68
69
  To install stable version of additional_tags, use
69
70
 
@@ -34,8 +34,11 @@ class IssueTagsController < ApplicationController
34
34
 
35
35
  Issue.transaction do
36
36
  @issues.each do |issue|
37
+ issue.init_journal User.current
37
38
  # add tags added in placeholder for a single/multiple issue or overwrite tags for single issue
38
39
  params[:append] == 'true' ? issue.tag_list << tags : issue.tag_list = tags
40
+
41
+ issue.tags_to_journal issue.tag_list_was&.to_s, issue.tag_list.to_s
39
42
  issue.save!
40
43
  end
41
44
  end
@@ -3,6 +3,15 @@
3
3
  module AdditionalTagsHelper
4
4
  include ActsAsTaggableOn::TagsHelper
5
5
 
6
+ def format_tags_json(tags)
7
+ tags.map do |tag|
8
+ {
9
+ 'id' => tag.name,
10
+ 'text' => tag.name
11
+ }
12
+ end
13
+ end
14
+
6
15
  def manageable_tags
7
16
  AdditionalTags::Tags.sort_tag_list ActsAsTaggableOn::Tag.where({})
8
17
  end
@@ -53,7 +62,7 @@ module AdditionalTagsHelper
53
62
  when 'name:desc'
54
63
  tags = AdditionalTags::Tags.sort_tag_list(tags).reverse
55
64
  when 'count:asc'
56
- tags.sort! { |a, b| a.count <=> b.count }
65
+ tags.sort_by!(&:count)
57
66
  when 'count:desc'
58
67
  tags.sort! { |a, b| b.count <=> a.count }
59
68
  else
@@ -190,7 +199,7 @@ module AdditionalTagsHelper
190
199
  end
191
200
 
192
201
  def link_to_issue_tags_totals(entries:, project:, open_issues_only:)
193
- sum = if entries.blank? || entries.size.zero?
202
+ sum = if entries.blank? || entries.empty?
194
203
  0
195
204
  else
196
205
  query = IssueQuery.new project: project, name: '_'
@@ -10,8 +10,18 @@ module AdditionalTagsIssuesHelper
10
10
  AdditionalTags.setting?(:active_issue_tags) && User.current.allowed_to?(:view_issue_tags, @project)
11
11
 
12
12
  api.array :tags do
13
- @issue.tags.each do |tag|
14
- api.tag id: tag.id, name: tag.name
13
+ # support tags, which are not saved to database
14
+ if @issue.tag_list.present?
15
+ if @issue.tags.present? && @issue.tags.map(&:name) == @issue.tag_list
16
+ @issue.tags.each do |tag|
17
+ api.tag id: tag.id, name: tag.name
18
+ end
19
+ else
20
+ @issue.tag_list.each do |tag_name|
21
+ # there is no id for unsaved tags
22
+ api.tag name: tag_name
23
+ end
24
+ end
15
25
  end
16
26
  end
17
27
  end
@@ -35,7 +35,7 @@
35
35
  p.nodata = l :label_no_data
36
36
 
37
37
  javascript:
38
- $(document).ready(function(){
38
+ $(function() {
39
39
  $('#settings form').data('cmUrl', "#{context_menu_additional_tags_path}")
40
40
  })
41
41
 
@@ -15,7 +15,6 @@ bg:
15
15
  label_manage_tags: "Управление на маркерите"
16
16
  label_merge_selected_tags: "Обединение на избраните маркери"
17
17
  label_open_issues_only: "Показване само на отворените задачи"
18
- label_quantity: "Количество"
19
18
  label_show_with_count: "Показване на брой маркирани обекти"
20
19
  label_tag_color_theme: "Тема на цвета %{value}"
21
20
  label_tags_color_theme: "Цвят"
@@ -15,7 +15,6 @@ cs:
15
15
  label_manage_tags: "Spravovat štítky"
16
16
  label_merge_selected_tags: "Sloučit vybrané značky"
17
17
  label_open_issues_only: "Zobrazit pouze otevřené problémy"
18
- label_quantity: "Množství"
19
18
  label_show_with_count: "Zobrazit částku na značce"
20
19
  label_tag_color_theme: "Barevné téma %{value}"
21
20
  label_tags_color_theme: "Barva"
@@ -15,7 +15,6 @@ de:
15
15
  label_manage_tags: TAGs verwalten
16
16
  label_merge_selected_tags: Ausgewählte TAGs zusammenführen
17
17
  label_open_issues_only: Zeige nur offene Tickets
18
- label_quantity: Anzahl
19
18
  label_show_with_count: Zeige Anzahl zu TAG
20
19
  label_tag_color_theme: Farbschema %{value}
21
20
  label_tags_color_theme: Farbe
@@ -15,7 +15,6 @@ en:
15
15
  label_manage_tags: "Manage tags"
16
16
  label_merge_selected_tags: "Merge selected tags"
17
17
  label_open_issues_only: "Display open issues only"
18
- label_quantity: "Quantity"
19
18
  label_show_with_count: "Display amount on tag"
20
19
  label_tag_color_theme: Color theme %{value}
21
20
  label_tags_color_theme: Color
@@ -15,7 +15,6 @@ es:
15
15
  label_manage_tags: "Manejar tags"
16
16
  label_merge_selected_tags: "Fusionar tags seleccionadas"
17
17
  label_open_issues_only: "Mostrar sólo las peticiones abiertas"
18
- label_quantity: "Ctd."
19
18
  label_show_with_count: "Mostrar la cantidad en la tags"
20
19
  label_tag_color_theme: "Tema del color %{value}"
21
20
  label_tags_colors: "Color"
@@ -15,7 +15,6 @@ fr:
15
15
  label_manage_tags: "Gérer les tags"
16
16
  label_merge_selected_tags: "Fusionner les tags sélectionnées"
17
17
  label_open_issues_only: "Afficher uniquement les demandes ouverts"
18
- label_quantity: "Quantité"
19
18
  label_show_with_count: "Afficher le montant sur l'tags"
20
19
  label_tag_color_theme: "Thème de la couleur %{value}"
21
20
  label_tags_colors: "Couleur"
@@ -15,7 +15,6 @@ it:
15
15
  label_manage_tags: "Gestire i tag"
16
16
  label_merge_selected_tags: "Unisci i tag selezionati"
17
17
  label_open_issues_only: "Mostra solo i segnalazione"
18
- label_quantity: "Numero"
19
18
  label_show_with_count: "Visualizzare l'importo sul tag"
20
19
  label_tag_color_theme: "Tema colore %{value}"
21
20
  label_tags_colors: Colore
@@ -15,7 +15,6 @@ ja:
15
15
  label_manage_tags: "タグの管理"
16
16
  label_merge_selected_tags: "選択したタグをマージ"
17
17
  label_open_issues_only: "開いている問題のみを表示"
18
- label_quantity: "数量"
19
18
  label_show_with_count: "タグに金額を表示"
20
19
  label_tag_color_theme: "カラーテーマ%{value}"
21
20
  label_tags_colors: "カラー"
@@ -15,7 +15,6 @@ ko:
15
15
  label_manage_tags: "태그 관리"
16
16
  label_merge_selected_tags: "선택한 태그 병합"
17
17
  label_open_issues_only: "미해결 문제 만 표시"
18
- label_quantity: "수량"
19
18
  label_show_with_count: "태그에 금액 표시"
20
19
  label_tag_color_theme: "색상 테마 %{value}"
21
20
  label_tags_colors: "색깔"
@@ -15,7 +15,6 @@ pl:
15
15
  label_manage_tags: "Zarządzaj tagami"
16
16
  label_merge_selected_tags: "Łączenie wybranych tagów"
17
17
  label_open_issues_only: "Wyświetlaj tylko sprawy otwarte"
18
- label_quantity: "Ilość"
19
18
  label_show_with_count: "Wyświetlanie ilości na etykiecie"
20
19
  label_tag_color_theme: "Kolorowy motyw %{value}"
21
20
  label_tags_colors: Kolor
@@ -15,7 +15,6 @@ pt-BR:
15
15
  label_manage_tags: "Gerenciar etiquetas"
16
16
  label_merge_selected_tags: "Fundir tags selecionadas"
17
17
  label_open_issues_only: "Exibir apenas questões em aberto"
18
- label_quantity: "Quantidade"
19
18
  label_show_with_count: "Mostrar quantidade na etiqueta"
20
19
  label_tag_color_theme: "Tema da cor %{value}"
21
20
  label_tags_colors: "Cor"
@@ -15,7 +15,6 @@ ru:
15
15
  label_manage_tags: "Управление метками"
16
16
  label_merge_selected_tags: "Объединить выбранные метки"
17
17
  label_open_issues_only: "Отображать только открытые задачи"
18
- label_quantity: "Количество"
19
18
  label_show_with_count: "Отображать количество на метке"
20
19
  label_tag_color_theme: "Цветовая тема %{value}"
21
20
  label_tags_colors: "Цвет"
@@ -6,7 +6,7 @@ class MigrateExistingTags < ActiveRecord::Migration[5.2]
6
6
 
7
7
  excluded_taggable_types = %w[Question Contact DriveEntry]
8
8
 
9
- MigrateTag.all.each do |old_tag|
9
+ MigrateTag.find_each do |old_tag|
10
10
  ActsAsTaggableOn::Tagging.transaction do
11
11
  tag = ActsAsTaggableOn::Tag.find_by name: old_tag.name
12
12
  cnt = 0
@@ -19,10 +19,14 @@ module AdditionalTags
19
19
  render_on :view_wiki_show_sidebar_bottom, partial: 'wiki/tags_sidebar'
20
20
 
21
21
  def controller_issues_edit_before_save(context = {})
22
+ return unless AdditionalTags.setting? :active_issue_tags
23
+
22
24
  tags_journal context[:issue], context[:params]
23
25
  end
24
26
 
25
27
  def controller_issues_bulk_edit_before_save(context = {})
28
+ return unless AdditionalTags.setting? :active_issue_tags
29
+
26
30
  issue = context[:issue]
27
31
  params = context[:params]
28
32
 
@@ -54,7 +58,7 @@ module AdditionalTags
54
58
 
55
59
  pdf.ln
56
60
  pdf.SetFontStyle '', 8
57
- pdf.RDMCell 190, 5, page.tag_list.to_list
61
+ pdf.RDMCell 190, 5, page.tag_list.to_comma_list
58
62
  pdf.ln
59
63
  end
60
64
 
@@ -63,14 +67,14 @@ module AdditionalTags
63
67
  def issues_bulk_tags_fix(issue, params)
64
68
  return unless params && params[:issue]
65
69
 
66
- common_tags =
67
- if params[:common_tags].present?
68
- params[:common_tags].split(ActsAsTaggableOn.delimiter).collect(&:strip)
69
- else
70
- []
71
- end
70
+ common_tags = if params[:common_tags].present?
71
+ params[:common_tags].split(ActsAsTaggableOn.delimiter).map(&:strip)
72
+ else
73
+ []
74
+ end
75
+
72
76
  current_tags = ActsAsTaggableOn::TagList.new issue.tags.to_a
73
- new_tags = Array(params[:issue][:tag_list]).reject(&:empty?)
77
+ new_tags = Array(params[:issue][:tag_list]).compact_blank
74
78
 
75
79
  tags_to_add = new_tags - common_tags
76
80
  tags_to_remove = common_tags - new_tags
@@ -84,8 +88,7 @@ module AdditionalTags
84
88
  def tags_journal(issue, params)
85
89
  return unless params && params[:issue] && params[:issue][:tag_list]
86
90
 
87
- issue.tags_to_journal Issue.find_by(id: issue.id)&.tag_list&.to_s,
88
- issue.tag_list.to_s
91
+ issue.tags_to_journal issue.tag_list_was&.to_s, issue.tag_list.to_s
89
92
  end
90
93
  end
91
94
  end
@@ -6,25 +6,27 @@ module AdditionalTags
6
6
  extend ActiveSupport::Concern
7
7
 
8
8
  included do
9
+ include AdditionalTagsHelper
9
10
  include InstanceMethods
10
11
  end
11
12
 
12
13
  module InstanceMethods
13
14
  def issue_tags
14
15
  suggestion_order = AdditionalTags.setting(:tags_suggestion_order) || 'name'
15
- @tags = Issue.available_tags name_like: build_search_query_term(params),
16
- sort_by: suggestion_order,
17
- order: (suggestion_order == 'name' ? 'ASC' : 'DESC')
16
+ tags = Issue.available_tags name_like: build_search_query_term(params),
17
+ sort_by: suggestion_order,
18
+ order: (suggestion_order == 'name' ? 'ASC' : 'DESC')
18
19
 
19
- @tags = AdditionalTags::Tags.sort_tag_list @tags if suggestion_order == 'name'
20
+ tags = AdditionalTags::Tags.sort_tag_list tags if suggestion_order == 'name'
20
21
 
21
- render layout: false, partial: 'additional_tag_list', locals: { unsorted: true }
22
+ render json: format_tags_json(tags)
22
23
  end
23
24
 
24
25
  def wiki_tags
25
- @tags = WikiPage.available_tags project: nil,
26
- name_like: build_search_query_term(params)
27
- render layout: false, partial: 'additional_tag_list', locals: { unsorted: true }
26
+ tags = WikiPage.available_tags project: nil,
27
+ name_like: build_search_query_term(params)
28
+
29
+ render json: format_tags_json(tags)
28
30
  end
29
31
 
30
32
  def all_tags
@@ -32,10 +34,10 @@ module AdditionalTags
32
34
 
33
35
  q = build_search_query_term params
34
36
  sql_for_where = "LOWER(#{ActiveRecord::Base.connection.quote_table_name ActsAsTaggableOn.tags_table}.name) LIKE ?"
35
- @tags = ActsAsTaggableOn::Tag.where(sql_for_where, "%#{q.downcase}%")
36
- .order(name: :asc)
37
+ tags = ActsAsTaggableOn::Tag.where(sql_for_where, "%#{q.downcase}%")
38
+ .order(name: :asc)
37
39
 
38
- render layout: false, partial: 'additional_tag_list', locals: { unsorted: true }
40
+ render json: format_tags_json(tags)
39
41
  end
40
42
  end
41
43
  end
@@ -10,8 +10,8 @@ module AdditionalTags
10
10
  include InstanceMethods
11
11
  acts_as_ordered_taggable
12
12
 
13
- before_save :prepare_save_tag_change
14
- before_save :sort_tag_list
13
+ before_save :prepare_save_tag_change, if: proc { AdditionalTags.setting?(:active_issue_tags) }
14
+ before_save :sort_tag_list, if: proc { AdditionalTags.setting?(:active_issue_tags) }
15
15
 
16
16
  validate :validate_tags, if: proc { AdditionalTags.setting?(:active_issue_tags) }
17
17
 
@@ -101,8 +101,6 @@ module AdditionalTags
101
101
  tags = attrs.delete :tag_list
102
102
  tags = Array(tags).reject(&:empty?)
103
103
 
104
- # Additionals.debug "tags: #{tags.inspect} - project: #{project&.id} - access: #{user.allowed_to? :create_issue_tags, project}"
105
-
106
104
  if user.allowed_to?(:create_issue_tags, project) ||
107
105
  user.allowed_to?(:edit_issue_tags, project) && Issue.allowed_tags?(tags)
108
106
  attrs[:tag_list] = tags # required fix for journal details
@@ -115,7 +113,8 @@ module AdditionalTags
115
113
 
116
114
  copy_from_without_tags arg, **options
117
115
  issue = arg.is_a?(Issue) ? arg : Issue.visible.find(arg)
118
- self.tag_list = issue.tag_list
116
+ self.tags = issue.tags # required for bulk copy
117
+ self.tag_list = tags.map(&:name) # required for copy
119
118
  self
120
119
  end
121
120
 
@@ -15,7 +15,19 @@ module AdditionalTags
15
15
  module InstanceMethods
16
16
  def column_content_with_tags(column, item)
17
17
  if column.name == :issue_tags || item.is_a?(Issue) && column.name == :tags
18
- additional_tag_links item.instance_variable_get(:@visible_tags), tag_controller: 'issues'
18
+ tags = if item.instance_variable_defined? :@visible_tags
19
+ item.instance_variable_get :@visible_tags
20
+ elsif Setting.display_subprojects_issues?
21
+ # permission check required (expensive)
22
+ return unless User.current.allowed_to? :view_issue_tags, item.project
23
+
24
+ column.value item
25
+ else
26
+ # no permission check required
27
+ column.value item
28
+ end
29
+
30
+ additional_tag_links tags, tag_controller: 'issues'
19
31
  else
20
32
  column_content_without_tags column, item
21
33
  end
@@ -69,7 +69,7 @@ module AdditionalTags
69
69
  when '=', '!'
70
70
  ids_list = klass.tagged_with(values, any: true).ids
71
71
  # special case: filter with deleted tag
72
- return '(1=0)' if ids_list.blank? && values.present? && operator == '='
72
+ return AdditionalsQuery::NO_RESULT_CONDITION if ids_list.blank? && values.present? && operator == '='
73
73
  else
74
74
  allowed_projects = Project.where(Project.allowed_to_condition(User.current, permission))
75
75
  .select(:id)
@@ -90,7 +90,7 @@ module AdditionalTags
90
90
  "(#{klass.table_name}.id #{compare} (#{ids_list.join ','}))"
91
91
  elsif values.present? && operator == '='
92
92
  # special case: filter with deleted tag
93
- '(1=0)'
93
+ AdditionalsQuery::NO_RESULT_CONDITION
94
94
  end
95
95
  else
96
96
  entries = ActsAsTaggableOn::Tagging.where taggable_type: klass.name
@@ -2,6 +2,6 @@
2
2
 
3
3
  module AdditionalTags
4
4
  module PluginVersion
5
- VERSION = '1.0.7' unless defined? VERSION
5
+ VERSION = '3.1.0' unless defined? AdditionalTags::PluginVersion::VERSION
6
6
  end
7
7
  end
@@ -27,6 +27,15 @@ module AdditionalTags
27
27
  elsif options[:visible_condition]
28
28
  scope = scope.where klass.visible_condition(user)
29
29
  end
30
+
31
+ # @TODO: this should be activated and replace next line
32
+ # Additionals::EntityMethodsGlobal should be included for this
33
+ #
34
+ # if options[:name_like]
35
+ # scope = scope.like_with_wildcard columns: "#{TAG_TABLE_NAME}.name",
36
+ # value: options[:name_like],
37
+ # wildcard: :both
38
+ # end
30
39
  scope = scope.where "LOWER(#{TAG_TABLE_NAME}.name) LIKE ?", "%#{options[:name_like].downcase}%" if options[:name_like]
31
40
  scope = scope.where "#{TAG_TABLE_NAME}.name=?", options[:name] if options[:name]
32
41
  scope = scope.where "#{TAGGING_TABLE_NAME}.taggable_id!=?", options[:exclude_id] if options[:exclude_id]
@@ -39,8 +48,7 @@ module AdditionalTags
39
48
  end
40
49
 
41
50
  def all_type_tags(klass, without_projects: false)
42
- ActsAsTaggableOn::Tag.all
43
- .joins(tag_for_joins(klass, without_projects: without_projects))
51
+ ActsAsTaggableOn::Tag.joins(tag_for_joins(klass, without_projects: without_projects))
44
52
  .distinct
45
53
  .order(:name)
46
54
  end
@@ -146,7 +154,7 @@ module AdditionalTags
146
154
  "COUNT(DISTINCT #{TAGGING_TABLE_NAME}.taggable_id) AS count"]
147
155
 
148
156
  columns << "MIN(#{TAGGING_TABLE_NAME}.created_at) AS last_created" if sort_by == 'last_created'
149
- columns.to_list
157
+ columns.to_comma_list
150
158
  end
151
159
 
152
160
  def status_for_tag_value(scope:, tag_id:, group_id: nil, group_id_is_bool: false)
@@ -208,7 +216,7 @@ module AdditionalTags
208
216
  if projects_allowed.present?
209
217
  "#{Project.table_name}.id IN (#{projects_allowed.join ','})" unless projects_allowed.empty?
210
218
  else
211
- '1=0'
219
+ AdditionalsQuery::NO_RESULT_CONDITION
212
220
  end
213
221
  end
214
222
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: additional_tags
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.7
4
+ version: 3.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - AlphaNodes
8
8
  autorequire:
9
- bindir: exe
9
+ bindir: bin
10
10
  cert_chain: []
11
- date: 2022-12-30 00:00:00.000000000 Z
11
+ date: 2023-12-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: acts-as-taggable-on
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '9.0'
19
+ version: '10.0'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '9.0'
26
+ version: '10.0'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: redmine_plugin_kit
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -38,34 +38,6 @@ dependencies:
38
38
  - - ">="
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
- - !ruby/object:Gem::Dependency
42
- name: bundler
43
- requirement: !ruby/object:Gem::Requirement
44
- requirements:
45
- - - ">="
46
- - !ruby/object:Gem::Version
47
- version: '0'
48
- type: :development
49
- prerelease: false
50
- version_requirements: !ruby/object:Gem::Requirement
51
- requirements:
52
- - - ">="
53
- - !ruby/object:Gem::Version
54
- version: '0'
55
- - !ruby/object:Gem::Dependency
56
- name: rake
57
- requirement: !ruby/object:Gem::Requirement
58
- requirements:
59
- - - ">="
60
- - !ruby/object:Gem::Version
61
- version: '0'
62
- type: :development
63
- prerelease: false
64
- version_requirements: !ruby/object:Gem::Requirement
65
- requirements:
66
- - - ">="
67
- - !ruby/object:Gem::Version
68
- version: '0'
69
41
  description: Redmine plugin for adding tag functionality
70
42
  email:
71
43
  - alex@alphanodes.com
@@ -73,18 +45,8 @@ executables: []
73
45
  extensions: []
74
46
  extra_rdoc_files: []
75
47
  files:
76
- - ".eslintrc.yml"
77
- - ".github/workflows/codeql-analysis.yml"
78
- - ".github/workflows/linters.yml"
79
- - ".github/workflows/tests.yml"
80
- - ".gitignore"
81
- - ".rubocop.yml"
82
- - ".slim-lint.yml"
83
- - ".stylelintrc.json"
84
48
  - LICENSE
85
49
  - README.md
86
- - Rakefile
87
- - additional_tags.gemspec
88
50
  - app/controllers/additional_tags_controller.rb
89
51
  - app/controllers/issue_tags_controller.rb
90
52
  - app/helpers/additional_tags_helper.rb
@@ -106,7 +68,6 @@ files:
106
68
  - app/views/additional_tags/settings/_general.html.slim
107
69
  - app/views/additional_tags/settings/_manage_tags.html.slim
108
70
  - app/views/additional_tags/settings/_settings.html.slim
109
- - app/views/auto_completes/_additional_tag_list.slim
110
71
  - app/views/common/_tag_summary_block.html.slim
111
72
  - app/views/context_menus/_issues_tags.html.slim
112
73
  - app/views/dashboards/blocks/_issue_tags.html.slim
@@ -142,9 +103,6 @@ files:
142
103
  - config/settings.yml
143
104
  - db/migrate/20201116145429_acts_as_taggable_migration.rb
144
105
  - db/migrate/20201123093214_migrate_existing_tags.rb
145
- - doc/images/additional-tags-framework.png
146
- - doc/images/additional-tags.gif
147
- - doc/images/tag-overview.png
148
106
  - init.rb
149
107
  - lib/additional_tags.rb
150
108
  - lib/additional_tags/hooks/model_hook.rb
@@ -177,7 +135,6 @@ files:
177
135
  - lib/additional_tags/plugin_version.rb
178
136
  - lib/additional_tags/tags.rb
179
137
  - lib/tasks/additional_tags.rake
180
- - package.json
181
138
  homepage: https://github.com/alphanodes/additional_tags
182
139
  licenses:
183
140
  - GPL-2.0
@@ -191,14 +148,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
191
148
  requirements:
192
149
  - - ">="
193
150
  - !ruby/object:Gem::Version
194
- version: '2.7'
151
+ version: '3.0'
195
152
  required_rubygems_version: !ruby/object:Gem::Requirement
196
153
  requirements:
197
154
  - - ">="
198
155
  - !ruby/object:Gem::Version
199
156
  version: '0'
200
157
  requirements: []
201
- rubygems_version: 3.3.26
158
+ rubygems_version: 3.4.10
202
159
  signing_key:
203
160
  specification_version: 4
204
161
  summary: Redmine plugin for adding tag functionality
data/.eslintrc.yml DELETED
@@ -1,17 +0,0 @@
1
- env:
2
- browser: true
3
- jquery: true
4
- extends: 'eslint:recommended'
5
- rules:
6
- indent:
7
- - error
8
- - 2
9
- linebreak-style:
10
- - error
11
- - unix
12
- quotes:
13
- - error
14
- - single
15
- semi:
16
- - error
17
- - always
@@ -1,70 +0,0 @@
1
- # For most projects, this workflow file will not need changing; you simply need
2
- # to commit it to your repository.
3
- #
4
- # You may wish to alter this file to override the set of languages analyzed,
5
- # or to provide custom queries or build logic.
6
- #
7
- # ******** NOTE ********
8
- # We have attempted to detect the languages in your repository. Please check
9
- # the `language` matrix defined below to confirm you have the correct set of
10
- # supported CodeQL languages.
11
- #
12
- name: "CodeQL"
13
-
14
- on:
15
- push:
16
- branches: [ main ]
17
- pull_request:
18
- # The branches below must be a subset of the branches above
19
- branches: [ main ]
20
- schedule:
21
- - cron: '35 20 * * 2'
22
-
23
- jobs:
24
- analyze:
25
- name: Analyze
26
- runs-on: ubuntu-latest
27
- permissions:
28
- actions: read
29
- contents: read
30
- security-events: write
31
-
32
- strategy:
33
- fail-fast: false
34
- matrix:
35
- language: [ 'javascript', 'ruby' ]
36
- # CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python', 'ruby' ]
37
- # Learn more about CodeQL language support at https://git.io/codeql-language-support
38
-
39
- steps:
40
- - name: Checkout repository
41
- uses: actions/checkout@v3
42
-
43
- # Initializes the CodeQL tools for scanning.
44
- - name: Initialize CodeQL
45
- uses: github/codeql-action/init@v2
46
- with:
47
- languages: ${{ matrix.language }}
48
- # If you wish to specify custom queries, you can do so here or in a config file.
49
- # By default, queries listed here will override any specified in a config file.
50
- # Prefix the list here with "+" to use these queries and those in the config file.
51
- # queries: ./path/to/local/query, your-org/your-repo/queries@main
52
-
53
- # Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
54
- # If this step fails, then you should remove it and run the build manually (see below)
55
- - name: Autobuild
56
- uses: github/codeql-action/autobuild@v2
57
-
58
- # ℹ️ Command-line programs to run using the OS shell.
59
- # 📚 https://git.io/JvXDl
60
-
61
- # ✏️ If the Autobuild fails above, remove it and uncomment the following three lines
62
- # and modify them (or add more) to build your code if your project
63
- # uses a compiled language
64
-
65
- #- run: |
66
- # make bootstrap
67
- # make release
68
-
69
- - name: Perform CodeQL Analysis
70
- uses: github/codeql-action/analyze@v2
@@ -1,55 +0,0 @@
1
- name: Run Linters
2
- on:
3
- push:
4
- pull_request:
5
-
6
- jobs:
7
- test:
8
- runs-on: ubuntu-latest
9
-
10
- steps:
11
- - uses: actions/checkout@v3
12
-
13
- - name: Install package dependencies
14
- run: >
15
- sudo apt-get install --yes --quiet pandoc
16
-
17
- - name: Setup Gemfile
18
- run: |
19
- touch .enable_linters
20
- sed -i "3isource 'https://rubygems.org'" Gemfile
21
-
22
- - name: Setup Ruby
23
- uses: ruby/setup-ruby@v1
24
- with:
25
- ruby-version: 3.1
26
-
27
- - name: Run bundle install
28
- run: |
29
- bundle install --jobs 4 --retry 3
30
-
31
- - name: Run RuboCop
32
- run: |
33
- bundle exec rubocop -S
34
-
35
- - name: Run Slim-Lint
36
- run: |
37
- bundle exec slim-lint app/views
38
- if: always()
39
-
40
- - name: Run Brakeman
41
- run: |
42
- bundle exec brakeman -5
43
-
44
- - name: Setup node
45
- uses: actions/setup-node@v2
46
- with:
47
- node-version: '16'
48
-
49
- - run: yarn install
50
-
51
- - name: Run Stylelint
52
- run: node_modules/.bin/stylelint assets/stylesheets/
53
-
54
- - name: Run ESLint
55
- run: node_modules/.bin/eslint assets/javascripts/
@@ -1,137 +0,0 @@
1
- name: Tests
2
- on:
3
- push:
4
- pull_request:
5
-
6
- jobs:
7
- test:
8
- name: ${{ matrix.redmine }} ${{ matrix.db }} ruby-${{ matrix.ruby }}
9
- runs-on: ubuntu-latest
10
-
11
- strategy:
12
- matrix:
13
- ruby: ['2.7', '3.0', '3.1', '3.2']
14
- redmine: ['5.0-stable', 'master']
15
- db: ['postgres', 'mysql']
16
- exclude:
17
- - ruby: '3.2'
18
- redmine: 5.0-stable
19
- fail-fast: false
20
-
21
- services:
22
- postgres:
23
- image: postgres:14
24
- env:
25
- POSTGRES_DB: redmine
26
- POSTGRES_USER: postgres
27
- POSTGRES_PASSWORD: postgres
28
- ports:
29
- - 5432:5432
30
-
31
- options: >-
32
- --health-cmd pg_isready
33
- --health-interval 10s
34
- --health-timeout 5s
35
- --health-retries 5
36
-
37
- mysql:
38
- image: mysql:8.0
39
- env:
40
- MYSQL_ROOT_PASSWORD: 'BestPasswordEver'
41
- ports:
42
- # will assign a random free host port
43
- - 3306/tcp
44
- options: >-
45
- --health-cmd="mysqladmin ping"
46
- --health-interval=10s
47
- --health-timeout=5s
48
- --health-retries=3
49
-
50
- steps:
51
- - name: Verify MySQL connection from host
52
- run: |
53
- mysql --host 127.0.0.1 --port ${{ job.services.mysql.ports[3306] }} -uroot -pBestPasswordEver -e "SHOW DATABASES"
54
- if: matrix.db == 'mysql'
55
-
56
- - name: Checkout Redmine
57
- uses: actions/checkout@v3
58
- with:
59
- repository: redmine/redmine
60
- ref: ${{ matrix.redmine }}
61
- path: redmine
62
-
63
- - name: Checkout additionals
64
- uses: actions/checkout@v3
65
- with:
66
- repository: AlphaNodes/additionals
67
- path: redmine/plugins/additionals
68
-
69
- - name: Checkout additional_tags
70
- uses: actions/checkout@v3
71
- with:
72
- path: redmine/plugins/additional_tags
73
-
74
- - name: Update package archives
75
- run: sudo apt-get update --yes --quiet
76
-
77
- - name: Install package dependencies
78
- run: >
79
- sudo apt-get install --yes --quiet
80
- build-essential
81
- cmake
82
- libicu-dev
83
- libpq-dev
84
- libmysqlclient-dev
85
-
86
- - name: Setup Gemfile
87
- run: |
88
- touch .enable_test
89
-
90
- - name: Setup Ruby
91
- uses: ruby/setup-ruby@v1
92
- with:
93
- ruby-version: ${{ matrix.ruby }}
94
- bundler-cache: true # runs 'bundle install' and caches installed gems automatically
95
-
96
- - name: Prepare Redmine source
97
- working-directory: redmine
98
- run: |
99
- cp plugins/additional_tags/test/support/database-${{ matrix.db }}.yml config/database.yml
100
- cp plugins/additional_tags/test/support/configuration.yml config/configuration.yml
101
- cp plugins/additionals/test/support/additional_environment.rb config/additional_environment.rb
102
-
103
- - name: Install Ruby dependencies
104
- working-directory: redmine
105
- run: |
106
- bundle config set --local without 'development'
107
- bundle install --jobs=4 --retry=3
108
-
109
- - name: Generate session store secret
110
- env:
111
- RAILS_ENV: test
112
- MYSQL_PORT: ${{ job.services.mysql.ports[3306] }}
113
- working-directory: redmine
114
- run: |
115
- bundle exec rake generate_secret_token
116
-
117
- - name: Run Redmine DB and migration tasks
118
- env:
119
- RAILS_ENV: test
120
- MYSQL_PORT: ${{ job.services.mysql.ports[3306] }}
121
- working-directory: redmine
122
- run: |
123
- bundle exec rake db:create db:migrate redmine:plugins:migrate
124
-
125
- - name: Run tests
126
- env:
127
- RAILS_ENV: test
128
- MYSQL_PORT: ${{ job.services.mysql.ports[3306] }}
129
- working-directory: redmine
130
- run: bundle exec rake redmine:plugins:test NAME=additional_tags RUBYOPT="-W0"
131
-
132
- - name: Run uninstall test
133
- env:
134
- RAILS_ENV: test
135
- MYSQL_PORT: ${{ job.services.mysql.ports[3306] }}
136
- working-directory: redmine
137
- run: bundle exec rake redmine:plugins:migrate NAME=additional_tags VERSION=0
data/.gitignore DELETED
@@ -1,13 +0,0 @@
1
- .DS_Store
2
- .buildpath
3
- coverage/
4
- tmp/
5
- Gemfile.lock
6
- .project
7
- .settings/
8
- .enable_*
9
- ._*
10
- *.gem
11
- /node_modules
12
- /yarn.lock
13
- rails_best_practices_output.html
data/.rubocop.yml DELETED
@@ -1,138 +0,0 @@
1
- require:
2
- - rubocop-performance
3
- - rubocop-rails
4
- - rubocop-minitest
5
-
6
- AllCops:
7
- TargetRubyVersion: 2.7
8
- TargetRailsVersion: 6.1
9
- NewCops: enable
10
- ActiveSupportExtensionsEnabled: true
11
-
12
- Rails:
13
- Enabled: true
14
-
15
- Minitest/MultipleAssertions:
16
- Max: 15
17
- Enabled: true
18
-
19
- Minitest/AssertPredicate:
20
- Enabled: false
21
-
22
- Metrics/AbcSize:
23
- Enabled: false
24
-
25
- Metrics/BlockLength:
26
- Enabled: false
27
-
28
- Metrics/ParameterLists:
29
- Enabled: true
30
- CountKeywordArgs: false
31
-
32
- Metrics/ClassLength:
33
- Enabled: false
34
-
35
- Metrics/CyclomaticComplexity:
36
- Max: 25
37
-
38
- Layout/LineLength:
39
- Max: 140
40
-
41
- Metrics/MethodLength:
42
- Max: 60
43
-
44
- Metrics/ModuleLength:
45
- Enabled: false
46
-
47
- Metrics/PerceivedComplexity:
48
- Max: 25
49
-
50
- Style/ExpandPathArguments:
51
- Enabled: true
52
- Exclude:
53
- - additional_tags.gemspec
54
- - test/**/*
55
-
56
- Rails/ApplicationJob:
57
- Enabled: false
58
-
59
- Lint/AmbiguousOperatorPrecedence:
60
- Enabled: false
61
-
62
- Rails/ContentTag:
63
- Enabled: true
64
- Exclude:
65
- - app/helpers/additional_tags_issues_helper.rb
66
-
67
- Rails/ApplicationRecord:
68
- Enabled: false
69
-
70
- Rails/CreateTableWithTimestamps:
71
- Enabled: false
72
-
73
- Rails/HelperInstanceVariable:
74
- Enabled: false
75
-
76
- Rails/SkipsModelValidations:
77
- Enabled: false
78
-
79
- Performance/ChainArrayAllocation:
80
- Enabled: true
81
-
82
- Style/AutoResourceCleanup:
83
- Enabled: true
84
-
85
- Style/FrozenStringLiteralComment:
86
- Enabled: true
87
- Exclude:
88
- - '/**/*.rsb'
89
-
90
- Style/Documentation:
91
- Enabled: false
92
-
93
- Style/OptionHash:
94
- Enabled: true
95
- SuspiciousParamNames:
96
- - options
97
- - api_options
98
- - opts
99
- - args
100
- - params
101
- - parameters
102
- - settings
103
-
104
- # postgresql and mysql are supported
105
- # autodetect does not work without database configuration
106
- Rails/BulkChangeTable:
107
- Enabled: true
108
- Database: postgresql
109
-
110
- Style/ReturnNil:
111
- Enabled: true
112
-
113
- Style/UnlessLogicalOperators:
114
- Enabled: true
115
-
116
- Style/MethodCallWithArgsParentheses:
117
- Enabled: true
118
- AllowParenthesesInMultilineCall: true
119
- AllowParenthesesInChaining: true
120
- EnforcedStyle: omit_parentheses
121
-
122
- Naming/VariableNumber:
123
- Enabled: true
124
- Exclude:
125
- - 'test/**/*'
126
-
127
- Layout/LineContinuationLeadingSpace:
128
- Enabled: false
129
-
130
- # see https://github.com/rubocop/rubocop-rails/issues/578
131
- # redmine does not use load_defaults: https://rails.rubystyle.guide/#config-defaults
132
- Rails/RedundantPresenceValidationOnBelongsTo:
133
- Enabled: false
134
-
135
- # see https://github.com/rubocop/rubocop-rails/issues/825
136
- # should be removed and corrected in code, if this bug is fixed
137
- Rails/ActionControllerFlashBeforeRender:
138
- Enabled: false
data/.slim-lint.yml DELETED
@@ -1,27 +0,0 @@
1
- linters:
2
- LineLength:
3
- max: 140
4
- RuboCop:
5
- ignored_cops:
6
- - Layout/ArgumentAlignment
7
- - Layout/ArrayAlignment
8
- - Layout/BlockEndNewline
9
- - Layout/EmptyLineAfterGuardClause
10
- - Layout/HashAlignment
11
- - Layout/IndentationWidth
12
- - Layout/MultilineArrayBraceLayout
13
- - Layout/MultilineAssignmentLayout
14
- - Layout/MultilineBlockLayout
15
- - Layout/MultilineHashBraceLayout
16
- - Layout/MultilineMethodCallBraceLayout
17
- - Layout/MultilineMethodCallIndentation
18
- - Layout/MultilineMethodDefinitionBraceLayout
19
- - Layout/MultilineOperationIndentation
20
- - Layout/SpaceBeforeBrackets
21
- - Layout/TrailingEmptyLines
22
- - Lint/Void
23
- - Rails/OutputSafety
24
- - Style/FrozenStringLiteralComment
25
- - Style/IfUnlessModifier
26
- - Style/Next
27
- - Style/WhileUntilModifier
data/.stylelintrc.json DELETED
@@ -1,20 +0,0 @@
1
- {
2
- "extends": "stylelint-config-standard",
3
- "rules": {
4
- "string-quotes": "single",
5
- "selector-class-pattern": "^([a-z][a-z0-9]*)(-[a-z0-9]+)*$|block_column",
6
- "font-family-no-missing-generic-family-keyword": [
7
- true,
8
- {
9
- "ignoreFontFamilies": [
10
- "Font Awesome 5 Free",
11
- "Font Awesome 5 Brands",
12
- "Apple Color Emoji",
13
- "Segoe UI Emoji",
14
- "Segoe UI Symbol",
15
- "Noto Color Emoji"
16
- ]
17
- }
18
- ]
19
- }
20
- }
data/Rakefile DELETED
@@ -1,13 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'bundler/gem_tasks'
4
- require 'rake/testtask'
5
-
6
- Rake::TestTask.new do |t|
7
- t.libs << 'test'
8
- files = FileList['test/**/*test.rb']
9
- t.test_files = files
10
- t.verbose = true
11
- end
12
-
13
- task default: :test
@@ -1,32 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- lib = File.expand_path '../lib', __FILE__
4
- $LOAD_PATH.unshift lib unless $LOAD_PATH.include? lib
5
- require 'additional_tags/plugin_version'
6
-
7
- Gem::Specification.new do |spec|
8
- spec.name = 'additional_tags'
9
- spec.version = AdditionalTags::PluginVersion::VERSION
10
- spec.authors = ['AlphaNodes']
11
- spec.email = ['alex@alphanodes.com']
12
- spec.metadata = { 'rubygems_mfa_required' => 'true' }
13
-
14
- spec.summary = 'Redmine plugin for adding tag functionality'
15
- spec.description = 'Redmine plugin for adding tag functionality'
16
- spec.homepage = 'https://github.com/alphanodes/additional_tags'
17
- spec.license = 'GPL-2.0'
18
-
19
- spec.files = `git ls-files -z`.split("\x0").reject do |f|
20
- f.match %r{^((test|spec|features)/|Gemfile)}
21
- end
22
- spec.bindir = 'exe'
23
- spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename f }
24
- spec.require_paths = ['lib']
25
- spec.required_ruby_version = '>= 2.7'
26
-
27
- spec.add_runtime_dependency 'acts-as-taggable-on', '~> 9.0'
28
- spec.add_runtime_dependency 'redmine_plugin_kit'
29
-
30
- spec.add_development_dependency 'bundler'
31
- spec.add_development_dependency 'rake'
32
- end
@@ -1 +0,0 @@
1
- == @tags.collect { |tag| { 'id' => tag.name, 'text' => tag.name } }.to_json
Binary file
Binary file
data/package.json DELETED
@@ -1,8 +0,0 @@
1
- {
2
- "dependencies": {},
3
- "devDependencies": {
4
- "eslint": "^8.0.0",
5
- "stylelint": "^14.0.0",
6
- "stylelint-config-standard": "^29.0.0"
7
- }
8
- }