diff --git a/CHANGELOG.md b/CHANGELOG.md
index c5e8f4ae7e..fa8523e493 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -9,6 +9,23 @@ This project does not yet adheres to [Semantic Versioning](https://semv
\-
+## [0.22.2] - 2021-12-02
+
+### Changed
+- Upped from 40 to 500 the cutoff point at which updating a collecing event will trigger a DwcOccurrence rebuild
+- Added a `url_base` option when rendering metadata partial
+
+### Fixed
+- Author by first letter (/people.json) [2697]
+- Loan recipient helper methods were confused with loan helper methods
+- Subsequent combination link in new taxon name task [#2695]
+- Unable to create tags in batches due to Ruby 3 syntax changes.
+- Observation matrices crashing due to response pagination bug.
+- Unable to create namespaces due to debug code accidentally added.
+
+[#2697]: https://github.com/SpeciesFileGroup/taxonworks/issues/2697
+[#2695]: https://github.com/SpeciesFileGroup/taxonworks/issues/2695
+
## [0.22.1] - 2021-12-01
### Added
@@ -2109,7 +2126,8 @@ This project does not yet adheres to [Semantic Versioning](https://semv
[#1532]: https://github.com/SpeciesFileGroup/taxonworks/issues/1532
-[unreleased]: https://github.com/SpeciesFileGroup/taxonworks/compare/v0.22.1...development
+[unreleased]: https://github.com/SpeciesFileGroup/taxonworks/compare/v0.22.2...development
+[0.22.2]: https://github.com/SpeciesFileGroup/taxonworks/compare/v0.22.1...v0.22.2
[0.22.1]: https://github.com/SpeciesFileGroup/taxonworks/compare/v0.22.0...v0.22.1
[0.22.0]: https://github.com/SpeciesFileGroup/taxonworks/compare/v0.21.3...v0.22.0
[0.21.3]: https://github.com/SpeciesFileGroup/taxonworks/compare/v0.21.2...v0.21.3
diff --git a/app/controllers/namespaces_controller.rb b/app/controllers/namespaces_controller.rb
index d841380bd0..17c7b2b736 100644
--- a/app/controllers/namespaces_controller.rb
+++ b/app/controllers/namespaces_controller.rb
@@ -36,7 +36,6 @@ def edit
# POST /namespaces
# POST /namespaces.json
def create
- byebug
@namespace = Namespace.new(namespace_params)
respond_to do |format|
diff --git a/app/controllers/observation_matrices_controller.rb b/app/controllers/observation_matrices_controller.rb
index d666ce7204..6b9a262b1a 100644
--- a/app/controllers/observation_matrices_controller.rb
+++ b/app/controllers/observation_matrices_controller.rb
@@ -13,7 +13,7 @@ def index
render '/shared/data/all/index'
end
format.json {
- @observation_matrices = ObservationMatrix.where(project_id: sessions_current_project_id)
+ @observation_matrices = ObservationMatrix.where(project_id: sessions_current_project_id).page(params[:page]).per(params[:per])
}
end
end
@@ -24,7 +24,7 @@ def show
end
def list
- @observation_matrices = ObservationMatrix.with_project_id(sessions_current_project_id).page(params[:page])
+ @observation_matrices = ObservationMatrix.with_project_id(sessions_current_project_id).page(params[:page]).per(params[:per])
end
# GET /observation_matrices/new
diff --git a/app/controllers/sequences_controller.rb b/app/controllers/sequences_controller.rb
index 09eda7588e..b40eb1db84 100644
--- a/app/controllers/sequences_controller.rb
+++ b/app/controllers/sequences_controller.rb
@@ -3,11 +3,16 @@ class SequencesController < ApplicationController
before_action :set_sequence, only: [:show, :edit, :update, :destroy]
- # GET /sequences
- # GET /sequences.json
def index
- @recent_objects = Sequence.recent_from_project_id(sessions_current_project_id).order(updated_at: :desc).limit(10)
- render '/shared/data/all/index'
+ respond_to do |format|
+ format.html do
+ @recent_objects = Sequence.recent_from_project_id(sessions_current_project_id).order(updated_at: :desc).limit(10)
+ render '/shared/data/all/index'
+ end
+ format.json {
+ @sequences = Sequence.where(project_id: sessions_current_project_id).page(params[:page]).per(params[:per] || 500)
+ }
+ end
end
# GET /sequences/1
diff --git a/app/controllers/tags_controller.rb b/app/controllers/tags_controller.rb
index 57576fbe4f..35a868c158 100644
--- a/app/controllers/tags_controller.rb
+++ b/app/controllers/tags_controller.rb
@@ -114,7 +114,7 @@ def batch_remove
# POST /tags/batch_create.json?keyword_id=123&object_type=CollectionObject&object_ids[]=123
def batch_create
if Tag.batch_create(
- params.permit(:keyword_id, :object_type, object_ids: []).to_h.merge(user_id: sessions_current_user_id, project_id: sessions_current_project_id).symbolize_keys
+ **params.permit(:keyword_id, :object_type, object_ids: []).to_h.merge(user_id: sessions_current_user_id, project_id: sessions_current_project_id).symbolize_keys
)
render json: {success: true}
else
diff --git a/app/helpers/loan_recipients_helper.rb b/app/helpers/loan_recipients_helper.rb
index 5c6af38204..54239353ae 100644
--- a/app/helpers/loan_recipients_helper.rb
+++ b/app/helpers/loan_recipients_helper.rb
@@ -1,9 +1,8 @@
module LoanRecipientsHelper
- def loan_recipient_tag(loan)
- return nil if loan.nil?
- recipients = loan.loan_recipients.collect{|lr| person_tag(lr)}.join.html_safe
- recipients.blank? ? 'No recipients defined!' : recipients
+ def loan_recipient_tag(loan_recipient)
+ return nil if loan_recipient.nil?
+ person_tag(loan_recipient.person)
end
def loan_recipient_link(loan)
diff --git a/app/helpers/loans_helper.rb b/app/helpers/loans_helper.rb
index a27b187d53..6a69c50f93 100644
--- a/app/helpers/loans_helper.rb
+++ b/app/helpers/loans_helper.rb
@@ -13,7 +13,12 @@ def loan_tag(loan)
def label_for_loan(loan)
s = "loan #{loan.id}"
s << loan.identifiers&.pluck(:cached)&.join(', ')
+ end
+ def loan_recipients_tag(loan)
+ return nil if loan.nil?
+ recipients = loan.loan_recipients.collect{|lr| person_tag(lr)}.join.html_safe
+ recipients.blank? ? 'No recipients defined!' : recipients
end
def loan_autocomplete_tag(loan)
diff --git a/app/helpers/workbench/object_helper.rb b/app/helpers/workbench/object_helper.rb
index 30175339c0..a07f72b219 100644
--- a/app/helpers/workbench/object_helper.rb
+++ b/app/helpers/workbench/object_helper.rb
@@ -1,9 +1,8 @@
-
# A metamodule- helper methods for object related manipulations in other helpers
module Workbench::ObjectHelper
# @return [ActiveRecord object]
- # metamorphosize is defined in the conern Shared::IsData, if its available use it on the object
+ # metamorphosize is defined in the concern Shared::IsData, if its available use it on the object
def metamorphosize_if(object)
if object.respond_to?(:metamorphosize)
object.metamorphosize
@@ -11,7 +10,7 @@ def metamorphosize_if(object)
object
end
end
-
+
# @return [String]
# the member path base for the object, object should be metamorphosized before passing.
def member_base_path(object)
@@ -29,5 +28,4 @@ def helper_module(object)
(object.class.name + 'Helper').constantize
end
-
end
diff --git a/app/javascript/vue/components/radials/annotator/images/attribution.js b/app/javascript/vue/components/radials/annotator/images/attribution.js
index 8441257a23..2a3fca0a8f 100644
--- a/app/javascript/vue/components/radials/annotator/images/attribution.js
+++ b/app/javascript/vue/components/radials/annotator/images/attribution.js
@@ -1 +1 @@
-export default 'data:image/svg+xml;utf8;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pgo8IS0tIEdlbmVyYXRvcjogQWRvYmUgSWxsdXN0cmF0b3IgMTguMC4wLCBTVkcgRXhwb3J0IFBsdWctSW4gLiBTVkcgVmVyc2lvbjogNi4wMCBCdWlsZCAwKSAgLS0+CjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+CjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgdmVyc2lvbj0iMS4xIiBpZD0iQ2FwYV8xIiB4PSIwcHgiIHk9IjBweCIgdmlld0JveD0iMCAwIDM2Ny40NjcgMzY3LjQ2NyIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgMzY3LjQ2NyAzNjcuNDY3OyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSIgd2lkdGg9IjE2cHgiIGhlaWdodD0iMTZweCI+CjxnPgoJPHBhdGggZD0iTTE4My43MywwLjAxOEM4Mi40MjcsMC4wMTgsMCw4Mi40MDQsMCwxODMuNzMzYzAsMTAxLjI4OSw4Mi40MjcsMTgzLjcxNiwxODMuNzMsMTgzLjcxNiAgIGMxMDEuMzE1LDAsMTgzLjczNy04Mi40MjcsMTgzLjczNy0xODMuNzE2QzM2Ny40NjcsODIuNDA0LDI4NS4wNDUsMC4wMTgsMTgzLjczLDAuMDE4eiBNMTgzLjczLDMyNi41MTggICBjLTc4Ljc0MywwLTE0Mi43OTgtNjQuMDUyLTE0Mi43OTgtMTQyLjc4NGMwLTc4Ljc2Niw2NC4wNTUtMTQyLjgxNywxNDIuNzk4LTE0Mi44MTdjNzguNzUyLDAsMTQyLjgwNyw2NC4wNTIsMTQyLjgwNywxNDIuODE3ICAgQzMyNi41MzYsMjYyLjQ2NiwyNjIuNDgxLDMyNi41MTgsMTgzLjczLDMyNi41MTh6IiBmaWxsPSIjNDQ0NDQ0Ii8+Cgk8cGF0aCBkPSJNMjQ0LjAzNiwyMTcuMDE0Yy0xMS43MzcsMjAuMTQxLTMzLjU2MiwzMi42MzUtNTYuOTU2LDMyLjYzNWMtMzYuMzI5LDAtNjUuOTIxLTI5LjU4NS02NS45MjEtNjUuOTE1ICAgYzAtMzYuMzYsMjkuNTkyLTY1Ljk1NSw2NS45MjEtNjUuOTU1YzIzLjM5NSwwLDQ1LjIxOSwxMi41NCw1Ni45NTYsMzIuNjQxbDEuNTE3LDIuNjI3aDQ0LjI4bC0yLjY1OC03LjEyOSAgIGMtNy43MDUtMjAuNDEzLTIxLjIyNS0zNy43NjktMzkuMTIyLTUwLjE1N2MtMTcuOTQyLTEyLjQyLTM5LjAxNy0xOS4wMDktNjAuOTczLTE5LjAwOWMtNTguOTgxLDAtMTA2Ljk0Niw0OC4wMDYtMTA2Ljk0NiwxMDYuOTgyICAgYzAsNTguOTgsNDcuOTY1LDEwNi45NDEsMTA2Ljk0NiwxMDYuOTQxYzIxLjk1NiwwLDQzLjAzLTYuNTY3LDYwLjk3My0xOS4wMDZjMTcuODk3LTEyLjM5MSwzMS40MTctMjkuNzQxLDM5LjEyMi01MC4xNTQgICBsMi42NTgtNy4xMzNoLTQ0LjI4TDI0NC4wMzYsMjE3LjAxNHoiIGZpbGw9IiM0NDQ0NDQiLz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8L3N2Zz4K'
\ No newline at end of file
+export default 'data:image/svg+xml;utf8;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pgo8IS0tIEdlbmVyYXRvcjogQWRvYmUgSWxsdXN0cmF0b3IgMTguMC4wLCBTVkcgRXhwb3J0IFBsdWctSW4gLiBTVkcgVmVyc2lvbjogNi4wMCBCdWlsZCAwKSAgLS0+CjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+CjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgdmVyc2lvbj0iMS4xIiBpZD0iQ2FwYV8xIiB4PSIwcHgiIHk9IjBweCIgdmlld0JveD0iMCAwIDM2Ny40NjcgMzY3LjQ2NyIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgMzY3LjQ2NyAzNjcuNDY3OyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSIgd2lkdGg9IjE2cHgiIGhlaWdodD0iMTZweCI+CjxnPgoJPHBhdGggZD0iTTE4My43MywwLjAxOEM4Mi40MjcsMC4wMTgsMCw4Mi40MDQsMCwxODMuNzMzYzAsMTAxLjI4OSw4Mi40MjcsMTgzLjcxNiwxODMuNzMsMTgzLjcxNiAgIGMxMDEuMzE1LDAsMTgzLjczNy04Mi40MjcsMTgzLjczNy0xODMuNzE2QzM2Ny40NjcsODIuNDA0LDI4NS4wNDUsMC4wMTgsMTgzLjczLDAuMDE4eiBNMTgzLjczLDMyNi41MTggICBjLTc4Ljc0MywwLTE0Mi43OTgtNjQuMDUyLTE0Mi43OTgtMTQyLjc4NGMwLTc4Ljc2Niw2NC4wNTUtMTQyLjgxNywxNDIuNzk4LTE0Mi44MTdjNzguNzUyLDAsMTQyLjgwNyw2NC4wNTIsMTQyLjgwNywxNDIuODE3ICAgQzMyNi41MzYsMjYyLjQ2NiwyNjIuNDgxLDMyNi41MTgsMTgzLjczLDMyNi41MTh6IiBmaWxsPSIjNDQ0NDQ0Ii8+Cgk8cGF0aCBkPSJNMjQ0LjAzNiwyMTcuMDE0Yy0xMS43MzcsMjAuMTQxLTMzLjU2MiwzMi42MzUtNTYuOTU2LDMyLjYzNWMtMzYuMzI5LDAtNjUuOTIxLTI5LjU4NS02NS45MjEtNjUuOTE1ICAgYzAtMzYuMzYsMjkuNTkyLTY1Ljk1NSw2NS45MjEtNjUuOTU1YzIzLjM5NSwwLDQ1LjIxOSwxMi41NCw1Ni45NTYsMzIuNjQxbDEuNTE3LDIuNjI3aDQ0LjI4bC0yLjY1OC03LjEyOSAgIGMtNy43MDUtMjAuNDEzLTIxLjIyNS0zNy43NjktMzkuMTIyLTUwLjE1N2MtMTcuOTQyLTEyLjQyLTM5LjAxNy0xOS4wMDktNjAuOTczLTE5LjAwOWMtNTguOTgxLDAtMTA2Ljk0Niw0OC4wMDYtMTA2Ljk0NiwxMDYuOTgyICAgYzAsNTguOTgsNDcuOTY1LDEwNi45NDEsMTA2Ljk0NiwxMDYuOTQxYzIxLjk1NiwwLDQzLjAzLTYuNTY3LDYwLjk3My0xOS4wMDZjMTcuODk3LTEyLjM5MSwzMS40MTctMjkuNzQxLDM5LjEyMi01MC4xNTQgICBsMi42NTgtNy4xMzNoLTQ0LjI4TDI0NC4wMzYsMjE3LjAxNHoiIGZpbGw9IiM0NDQ0NDQiLz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8L3N2Zz4K'
diff --git a/app/javascript/vue/components/radials/annotator/images/icons.js b/app/javascript/vue/components/radials/annotator/images/icons.js
index 717038c86e..133e45393b 100644
--- a/app/javascript/vue/components/radials/annotator/images/icons.js
+++ b/app/javascript/vue/components/radials/annotator/images/icons.js
@@ -10,6 +10,7 @@ import notes from './book'
import tags from './tag'
import attribution from './attribution'
import pin from './pin'
+import verifiers from './verifier'
const Icons = {
alternate_values,
@@ -23,7 +24,8 @@ const Icons = {
tags,
protocol_relationships,
attribution,
- pin
+ pin,
+ verifiers
}
export default Icons
diff --git a/app/javascript/vue/components/radials/annotator/images/verifier.js b/app/javascript/vue/components/radials/annotator/images/verifier.js
new file mode 100644
index 0000000000..89192632d2
--- /dev/null
+++ b/app/javascript/vue/components/radials/annotator/images/verifier.js
@@ -0,0 +1 @@
+export default 'data:image/svg+xml;utf8;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgoKPHN2ZwogICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgIHhtbG5zOmNjPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyMiCiAgIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyIKICAgeG1sbnM6c3ZnPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxuczpzb2RpcG9kaT0iaHR0cDovL3NvZGlwb2RpLnNvdXJjZWZvcmdlLm5ldC9EVEQvc29kaXBvZGktMC5kdGQiCiAgIHhtbG5zOmlua3NjYXBlPSJodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy9uYW1lc3BhY2VzL2lua3NjYXBlIgogICB3aWR0aD0iMTEzLjc1OTc3bW0iCiAgIGhlaWdodD0iMTAzLjkwMDk2bW0iCiAgIHZpZXdCb3g9IjAgMCAxMTMuNzU5NzcgMTAzLjkwMDk2IgogICB2ZXJzaW9uPSIxLjEiCiAgIGlkPSJzdmc5MzIiCiAgIGlua3NjYXBlOnZlcnNpb249IjAuOTIuNSAoMjA2MGVjMWY5ZiwgMjAyMC0wNC0wOCkiCiAgIHNvZGlwb2RpOmRvY25hbWU9InZlcmlmaWVyLnN2ZyI+CiAgPGRlZnMKICAgICBpZD0iZGVmczkyNiIgLz4KICA8c29kaXBvZGk6bmFtZWR2aWV3CiAgICAgaWQ9ImJhc2UiCiAgICAgcGFnZWNvbG9yPSIjZmZmZmZmIgogICAgIGJvcmRlcmNvbG9yPSIjNjY2NjY2IgogICAgIGJvcmRlcm9wYWNpdHk9IjEuMCIKICAgICBpbmtzY2FwZTpwYWdlb3BhY2l0eT0iMC4wIgogICAgIGlua3NjYXBlOnBhZ2VzaGFkb3c9IjIiCiAgICAgaW5rc2NhcGU6em9vbT0iMy45NTk3OTgiCiAgICAgaW5rc2NhcGU6Y3g9Ijg5LjU2MjYzOCIKICAgICBpbmtzY2FwZTpjeT0iMTM4LjMzMDciCiAgICAgaW5rc2NhcGU6ZG9jdW1lbnQtdW5pdHM9Im1tIgogICAgIGlua3NjYXBlOmN1cnJlbnQtbGF5ZXI9ImxheWVyMSIKICAgICBzaG93Z3JpZD0iZmFsc2UiCiAgICAgaW5rc2NhcGU6d2luZG93LXdpZHRoPSI1MTIwIgogICAgIGlua3NjYXBlOndpbmRvdy1oZWlnaHQ9IjI4MDYiCiAgICAgaW5rc2NhcGU6d2luZG93LXg9IjAiCiAgICAgaW5rc2NhcGU6d2luZG93LXk9IjAiCiAgICAgaW5rc2NhcGU6d2luZG93LW1heGltaXplZD0iMSIKICAgICBmaXQtbWFyZ2luLXRvcD0iMCIKICAgICBmaXQtbWFyZ2luLWxlZnQ9IjAiCiAgICAgZml0LW1hcmdpbi1yaWdodD0iMCIKICAgICBmaXQtbWFyZ2luLWJvdHRvbT0iMCIgLz4KICA8bWV0YWRhdGEKICAgICBpZD0ibWV0YWRhdGE5MjkiPgogICAgPHJkZjpSREY+CiAgICAgIDxjYzpXb3JrCiAgICAgICAgIHJkZjphYm91dD0iIj4KICAgICAgICA8ZGM6Zm9ybWF0PmltYWdlL3N2Zyt4bWw8L2RjOmZvcm1hdD4KICAgICAgICA8ZGM6dHlwZQogICAgICAgICAgIHJkZjpyZXNvdXJjZT0iaHR0cDovL3B1cmwub3JnL2RjL2RjbWl0eXBlL1N0aWxsSW1hZ2UiIC8+CiAgICAgICAgPGRjOnRpdGxlPjwvZGM6dGl0bGU+CiAgICAgIDwvY2M6V29yaz4KICAgIDwvcmRmOlJERj4KICA8L21ldGFkYXRhPgogIDxnCiAgICAgaW5rc2NhcGU6bGFiZWw9IkNhcGEgMSIKICAgICBpbmtzY2FwZTpncm91cG1vZGU9ImxheWVyIgogICAgIGlkPSJsYXllcjEiCiAgICAgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTAuMjY3MTQ5NTgsLTAuMjUwNjQ4NTEpIj4KICAgIDxwYXRoCiAgICAgICBzdHlsZT0iZmlsbDojMDAwMDAwO3N0cm9rZS13aWR0aDowLjI2NDU4MzMyIgogICAgICAgZD0ibSA0OS44OTIyMzMsMTAzLjY2NTU1IGMgLTIuMjQ5NTUsLTAuNjYwOTYgLTMuMzIyNzksLTEuMTU5MDkgLTUuMTA1MjMsLTIuMzY5NTIgLTEuNTkyNDYsLTEuMDgxNDEgLTMuODg1OTUsLTMuNDIwNTU2IC00LjM1MDcsLTQuNDM3MzA1IC0wLjE4OTA4LC0wLjQxMzY2IC0wLjU2Nzc3LC0wLjU5OTAyIC0xLjQyMDA4LC0wLjY5NTA4IC0xLjM3MDA1LC0wLjE1NDQzIC0xLjkwNjIyLC0wLjU0MTY1IC0yLjQwNjIsLTEuNzM3NzYgLTAuMzI2NywtMC43ODE1OCAtMC4zMTQ2OSwtMC45ODg5NyAwLjEwNzEzLC0xLjg0OTk5IDAuNTc1NTYsLTEuMTc0ODMgMS40MDkwMywtMS42MjgyIDIuOTg4NjIsLTEuNjI1NjYgMS42MzU5NywwLjAwMyAzLjE4NjI0LDAuNzcyMTQgNC4yNTgxNSwyLjExMzY0IDMuMDQ0MDIsMy44MDk2IDUuMDczOTgsNS4yNDgyNzkgOC4yMTUxMSw1LjgyMjI2OSAwLjk3Mzg2LDAuMTc3OTQgOS43MTQzOSwwLjI0Njk3IDI1LjEzNTQyLDAuMTk4NDkgbCAyMy42NDIzNzcsLTAuMDc0MyAxLjI3MzM1LC0wLjc0ODQ4IGMgMy41MTU4MiwtMi4wNjY1ODkgMy42NDgwNywtNi44NTE3ODkgMC4yNTM2NCwtOS4xNzc2OTkgLTAuODA5MTYsLTAuNTU0NDQgLTEuMzQ0NDYsLTAuNjY0ODcgLTMuODQzODU3LC0wLjc5MjkyIC0yLjg2MTAxLC0wLjE0NjU5IC0yLjkxNSwtMC4xNjEzNiAtMy42NjY4OSwtMS4wMDI4NyAtMC40MTk3MiwtMC40Njk3NSAtMC43NjMxMywtMS4xNTU3OCAtMC43NjMxMywtMS41MjQ1IDAsLTAuODcwODkgMC42NDYzNCwtMi4xMDgxNyAxLjI0Njk4LC0yLjM4NzA5IDAuMjYwMDUsLTAuMTIwNzUgMi4yMTkxNywtMC4yODQwMSA0LjM1MzYxLC0wLjM2Mjc5IDMuNzgwMTU3LC0wLjEzOTUyIDMuOTEwNTE3LC0wLjE2MzkxIDUuMDI3MDg3LC0wLjk0MDUxIDEuNDMyNDksLTAuOTk2MzYgMi4zMzY5MSwtMi42OTk1OSAyLjMzNjkxLC00LjQwMDk0IDAsLTEuNjA1MjUgLTAuMzU2OTUsLTIuNTI1MTkgLTEuNDA1MjksLTMuNjIxNzQgLTEuMzY3NDgsLTEuNDMwMzkgLTIuMTUyNzEsLTEuNzA3MjcgLTUuMjA5MjksLTEuODM2ODMgLTIuNTM3MDk3LC0wLjEwNzU2IC0yLjg0MTI1NywtMC4xNzY5MSAtMy41MDU3MzcsLTAuNzk5MjcgLTAuNTcxMzYsLTAuNTM1MTQgLTAuNzI3NiwtMC45MjE0OCAtMC43Mjc2LC0xLjc5OTA5IDAsLTAuOTIzMTcgMC4xNDE2MiwtMS4yMzY3NyAwLjgxNDA1LC0xLjgwMjU4IDAuNzY5MTgsLTAuNjQ3MjIgMC45NzY5NywtMC42ODUwNSAzLjc3MDMxNywtMC42ODY0NiAzLjcwOTQ0LC0wLjAwMiA0Ljc3NTQ4LC0wLjI5MjkgNi4xNjYwOCwtMS42ODM1IDIuMTQ5MTUsLTIuMTQ5MTYgMi4yMTA5OCwtNS4yMTIwNCAwLjE0OTU4LC03LjQxMDM2IC0xLjE4MDEyLC0xLjI1ODUxIC0yLjU1Njk4LC0xLjc0MDIyIC00Ljk5Mjc0LC0xLjc0Njc3IC0xLjkyMjIzLC0wLjAwNSAtMi4yNTA4MTcsLTAuMDgwMSAtMi45NTcxMjcsLTAuNjc0NDEgLTEuMDA1NTEsLTAuODQ2MDkgLTEuMjY2MjcsLTEuOTQyODUgLTAuNzE1MjUsLTMuMDA4NDEgMC41NzM0NiwtMS4xMDg5MyAwLjk4MTMzLC0xLjI2MjM4IDMuNzU3Mjg3LC0xLjQxMzQzIDEuODg1MDcsLTAuMTAyNTcgMi42NzIzOCwtMC4yNzEwNCAzLjU2MDEyLC0wLjc2MTc3IDEuNTQwMTgsLTAuODUxMzkgMi41ODY1OCwtMi4zOTg4MyAyLjc5MTM3LC00LjEyNzk0IDAuMjE5NTIsLTEuODUzNTMgLTAuNzg3NSwtNC4wMDYwNCAtMi4zNjE4NCwtNS4wNDg0MyBsIC0xLjA3ODU0LC0wLjcxNDExIC0xMi41ODc1OTcsLTAuMTMyMyAtMTIuNTg3NTksLTAuMTMyMjkgLTEuNTAxNTUsLTAuNzAzOSBjIC0yLjEyMTg0LC0wLjk5NDY4IC0zLjcwNzk4LC0yLjU1NDE3IC00LjU5OTU2LC00LjUyMjI5IGwgLTAuNzQ4ODIsLTEuNjUyOTcgLTAuMjA4MTgsLTEwLjE4NjQ2IGMgLTAuMjQyODIsLTExLjg4MDg3IC0wLjM3NzMxLC0xMi43MDEyNSAtMi40NjIzNSwtMTUuMDIwMzIwMiAtMS43NzYzLC0xLjk3NTY4IC0zLjEwMDMzLC0yLjUwNDI3IC02LjYxOTEyLC0yLjY0MjU2IC0xLjc1NzMzLC0wLjA2OTEgLTMuMjA0NTgsM2UtNSAtMy42NTI4OSwwLjE3NDQgbCAtMC43NDI0OCwwLjI4ODc3IDAuMTcwMDYsNC44Mjk1NDAyIGMgMC4wOTM1LDIuNjU2MjUgMC4wNTA3LDYuNjc1MDEgLTAuMDk1MSw4LjkzMDU5IC0wLjQzNDI5LDYuNzE3IC0xLjM1NDUxLDguNzIwNDIgLTUuMjI1NzgsMTEuMzc3MDggLTUuODI0OSwzLjk5NzM1IC04LjgwOTkxLDcuODM5MjIgLTExLjI0MTQxLDE0LjQ2ODMzIC0xLjM4MjQ0LDMuNzY4OTcgLTMuMTQ1MDcsNi4zNTg3NyAtNS4zNjc1LDcuODg2MzQgbCAtMS41NDAxOSwxLjA1ODY0IC0zLjAxMzkzLDAuMDk1NyAtMy4wMTM5MywwLjA5NTcgLTAuMDcxOCwyMy4xNDQ0NSAtMC4wNzE4LDIzLjE0NDQyNSAtMC44NjQwNywwLjc3MTk3IC0wLjg2NDA3LDAuNzcxOTcgaCAtMTMuMDMzODEgYyAtMTQuNDYwMjEwNTQsMCAtMTMuODc2MDAwNSwwLjA3IC0xNC42MzgyODA1NCwtMS43NTQzNyBsIC0wLjM3MjQ4LC0wLjg5MTQ0NiBjIC0wLjAzNywtMjIuNjA1OTg5IDAuMDQ0MiwtMjQuNDU2NjM5IDAuMjgyNSwtNTQuMjQ4NTA5IDAuMzkwOTMsLTIuNDA2NTUgMC4xNzgzOSwtMi4zNzIzMyAxNC43MzEyMTA1NCwtMi4zNzE4NSAxMS4yNTQxNywyLjZlLTQgMTIuNDYxODMsMC4wNDI0IDEzLjMwMzgxLDAuNDYzMDIgMS4xMjU5NSwwLjU2MjQ4IDEuNTUxNTEsMS42MzYzNSAxLjU3MjU3LDMuOTY4MzQgbCAwLjAxNDksMS42NTM2NSAyLjMxNTEsLTAuMDA2IGMgMS43OTcwNSwtMC4wMDUgMi40MzkxLC0wLjEwODE3IDIuODY5MjQsLTAuNDYzMDIgMS4xMTE5NSwtMC45MTcyOSAxLjk3NjY4LC0yLjQxMzM0IDMuMDE5MDUsLTUuMjIzMTcgMi42OTMzMywtNy4yNjAyMiA2Ljc0MzM5LC0xMi41NjM0OCAxMi41NDEyNywtMTYuNDIxOSAxLjkyMzA5LC0xLjI3OTc4IDIuMzE1MywtMS42NzI1MiAyLjg0NDUsLTIuODQ4MjcgMC41OTYxLC0xLjMyNDQgMC42MTc3NCwtMS42NDAxNyAwLjc0OTMxLC0xMC45MzEwMyBsIDAuMTM1NDgsLTkuNTY3MjQwMiAwLjgyMTk3LC0xLjAxNDkxIGMgMC40NTIwNywtMC41NTgyIDEuMzQ1MDQsLTEuMjgwNTMgMS45ODQzNywtMS42MDUxNyAzLjE1NTc1LC0xLjYwMjQ2MDAyIDkuNTI2MTcsLTEuMzc0MDIwMDIgMTMuMzk3ODIsMC40ODA0MyAxLjc3ODgxLDAuODUyMDIgNC41NTg0NywzLjcyMTkxIDUuNTYwNDIsNS43NDA5MyAxLjQyNTA2LDIuODcxNjIwMiAxLjYxOTAzLDQuNDg0MDYwMiAxLjg1MjYxLDE1LjQwMDkxMDIgMC4yMzQ4NiwxMC45NzY1OCAwLjE3MzIxLDEwLjYyMjA1IDIuMDMyNDMsMTEuNjg3ODUgbCAxLjA3MzMsMC42MTUyNiAxMS4yNzkxMiwtMC4wOTE1IGMgOC4wNDUwOTcsLTAuMDY1MyAxMS43MjQ0NjcsLThlLTQgMTIuODMyMjk3LDAuMjI1MjEgMy4zMjMxNCwwLjY3NzY1IDYuMzA3OTEsMy4wMDY2MyA3LjcyMzI0LDYuMDI2MzEgMC42MjgsMS4zMzk4NyAwLjcwOTEsMS44MzA2NSAwLjcwOTEsNC4yOTEwMyAwLDIuNDQ4NzYgLTAuMDgyNywyLjk1NDQxIC0wLjY5NzIyLDQuMjY1MDkgLTAuMzgzNDgsMC44MTc4MiAtMS4xMzgzOCwxLjk3NTI3IC0xLjY3NzU4LDIuNTcyMSBsIC0wLjk4MDM2LDEuMDg1MTIgMC45NDI3OSwxLjE1MDU2IGMgMy43MDI2Miw0LjUxODU2IDMuMjY5OTIsMTEuMjQ1NTggLTAuOTU1OTksMTQuODYyODEgbCAtMS4wNTU3MiwwLjkwMzY2IDAuNTY2OTUsMC43OTYyMSBjIDEuNzU2NjUsMi40NjY5OSAyLjQ5OTcxLDUuODQ0ODUgMS44NzU2LDguNTI2MjMgLTAuNDg4MTgsMi4wOTczNiAtMS43OTU1OSw0LjM4NjkxIC0zLjE5MTg3LDUuNTg5NjQgbCAtMS4yMjk1NiwxLjA1OTEyIDAuODg2OTcsMS4zMTgwNCBjIDEuOTYwMzQsMi45MTMwNSAyLjI1MDUzLDcuMDYwOCAwLjcxNzc0LDEwLjI1ODkxOSAtMC45MDIzNywxLjg4Mjc4IC0yLjUxNzYsMy42NTcxNTYgLTQuMjYwMDMsNC42Nzk4MTYgLTIuNDI1ODcsMS40MjM3NiAtMS45NDU2MSwxLjQwMDU1IC0yOC42NDQ4NTcsMS4zODM1OSAtMjIuODI0ODUsLTAuMDE0NSAtMjQuODYxMzQsLTAuMDUxOCAtMjYuMzI2MDQsLTAuNDgyMTMgeiBtIC0yNS4wNjc4OSwtMzAuNjUwNTM1IDAuMDY3NSwtMjQuNDA3ODEgaCAtOS42NTg2NiAtOS42NTg2NzA1IHYgMjQuMjk3NTUgYyAwLDEzLjM2MzY3IDAuMDgwOSwyNC4zNzg0MyAwLjE3OTY4LDI0LjQ3NzI2IDAuMDk4OCwwLjA5ODggNC40MTQ4Mzk1LDAuMTQ4NDMgOS41OTExNDA1LDAuMTEwMjQgbCA5LjQxMTQ3LC0wLjA2OTQgeiIKICAgICAgIGlkPSJwYXRoODM5IgogICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2NjY2NjY2NjY2NjY2Njc2NzY3Njc2NzY2NjY2NzY2NjY2NjY2NzY2Nzc2NjY2NjY2NjY2NjY2NjY3NjY2Njc2NjY2NjY2NzY2NjY2NzY2NjY3NzY2Njc3Njc2NzY2NjY3NjY2NjY2NzY2NjYyIgLz4KICA8L2c+Cjwvc3ZnPgo='
diff --git a/app/javascript/vue/tasks/nomenclature/new_taxon_name/components/Combination/CombinationMain.vue b/app/javascript/vue/tasks/nomenclature/new_taxon_name/components/Combination/CombinationMain.vue
index 8343b4659b..266cecb326 100644
--- a/app/javascript/vue/tasks/nomenclature/new_taxon_name/components/Combination/CombinationMain.vue
+++ b/app/javascript/vue/tasks/nomenclature/new_taxon_name/components/Combination/CombinationMain.vue
@@ -1,7 +1,7 @@
+ anchor="subsequent-combination">
Subsequent combination
diff --git a/app/javascript/vue/tasks/observation_matrices/dashboard/components/modalList.vue b/app/javascript/vue/tasks/observation_matrices/dashboard/components/modalList.vue
index de3f0b9ec9..c0a572f002 100644
--- a/app/javascript/vue/tasks/observation_matrices/dashboard/components/modalList.vue
+++ b/app/javascript/vue/tasks/observation_matrices/dashboard/components/modalList.vue
@@ -10,7 +10,7 @@
-
+
Select observation matrix to open MRC or Image matrix
diff --git a/app/javascript/vue/tasks/observation_matrices/dashboard/components/table.vue b/app/javascript/vue/tasks/observation_matrices/dashboard/components/table.vue
index 61b21cad1d..a947b57f82 100644
--- a/app/javascript/vue/tasks/observation_matrices/dashboard/components/table.vue
+++ b/app/javascript/vue/tasks/observation_matrices/dashboard/components/table.vue
@@ -78,7 +78,7 @@