#{truncate(text, :length => length, :omission => trailing_text)}" + more + ""
- end
-
- def chips_component(id: , name: , label: , value: , checked: false , tooltip: nil, &block)
- content_tag(:div, data: { controller: 'tooltip' }, title: tooltip) do
- check_input(id: id, name: name, value: value, label: label, checked: checked, &block)
- end
- end
-
- def group_chip_component(id: nil, name: , object: , checked: , value: nil, title: nil, &block)
- title ||= "#{object["name"]} (#{object["id"]})"
- value ||= (object["value"] || object["acronym"] || object["id"])
-
- chips_component(id: id || value, name: name, label: object["acronym"],
- checked: checked,
- value: value, tooltip: title, &block)
- end
- alias :category_chip_component :group_chip_component
-
+
def add_comment_button(parent_id, parent_type)
if session[:user].nil?
link_to t('application.add_comment'), login_index_path(redirect: request.url), class: "secondary-button regular-button slim"
@@ -571,4 +543,8 @@ def cancel_button_component(class_name: nil, id: , value:, data: nil)
end
end
+ def categories_select(id: nil, name: nil, selected: 'None')
+ categories_for_select = LinkedData::Client::Models::Category.all.map{|x| ["#{x.name} (#{x.acronym})", x.id]}.unshift(["None", ''])
+ render Input::SelectComponent.new(id: id, name: name, value: categories_for_select, selected: selected)
+ end
end
diff --git a/app/helpers/fair_score_helper.rb b/app/helpers/fair_score_helper.rb
index 7abb76eb6..ef5b81e2d 100644
--- a/app/helpers/fair_score_helper.rb
+++ b/app/helpers/fair_score_helper.rb
@@ -16,18 +16,22 @@ def get_fairness_json(ontologies_acronyms, apikey = user_apikey)
if Rails.cache.exist?("fairness-#{ontologies_acronyms.gsub(',', '-')}-#{apikey}")
out = read_large_data("fairness-#{ontologies_acronyms.gsub(',', '-')}-#{apikey}")
else
- out = "{}"
+ out = '{}'
begin
time = Benchmark.realtime do
conn = Faraday.new do |conn|
conn.options.timeout = 30
end
response = conn.get(get_fairness_service_url(apikey) + "&ontologies=#{ontologies_acronyms}&combined")
- out = response.body.force_encoding('ISO-8859-1').encode('UTF-8')
- cache_large_data("fairness-#{ontologies_acronyms.gsub(',', '-')}-#{apikey}", out)
+ if response.status.eql?(200)
+ out = response.body.force_encoding('ISO-8859-1').encode('UTF-8')
+ unless out.empty? || out.strip.eql?('{}')
+ cache_large_data("fairness-#{ontologies_acronyms.gsub(',', '-')}-#{apikey}", out)
+ end
+ end
end
puts "Call fairness service for: #{ontologies_acronyms} (#{time}s)"
- rescue
+ rescue StandardError
Rails.logger.warn t('fair_score.fairness_unreachable_warning')
end
end
@@ -140,7 +144,7 @@ def print_score(score)
def fairness_link(style: '', ontology: nil)
custom_style = "font-size: 50px; line-height: 0.5; margin-left: 6px; #{style}".strip
ontology = ontology || 'all'
- render IconWithTooltipComponent.new(icon: "json.svg",link: "#{get_fairness_service_url}&ontologies=#{ontology}&combined=true", target: '_blank', title: t('fair_score.go_to_api'), size:'small', style: custom_style)
+ render IconWithTooltipComponent.new(icon: 'json.svg',link: "#{get_fairness_service_url}&ontologies=#{ontology}&combined=true", target: '_blank', title: t('fair_score.go_to_api'), size:'small', style: custom_style)
end
private
diff --git a/app/helpers/federation_helper.rb b/app/helpers/federation_helper.rb
index 331787213..d4470c44c 100644
--- a/app/helpers/federation_helper.rb
+++ b/app/helpers/federation_helper.rb
@@ -1,11 +1,28 @@
module FederationHelper
def federated_portals
- $FEDERATED_PORTALS || {}
+ $FEDERATED_PORTALS ||= LinkedData::Client.settings.federated_portals
+ end
+
+ def internal_portal_config(id)
+ return unless internal_ontology?(id)
+
+ {
+ name: portal_name,
+ api: rest_url,
+ apikey: $API_KEY,
+ ui: $UI_URL,
+ color: "var(--primary-color)",
+ 'light-color': 'var(--light-color)',
+ }
end
def federated_portal_config(name_key)
- $FEDERATED_PORTALS[name_key.to_sym]
+ federated_portals[name_key.to_sym]
+ end
+
+ def portal_name_from_uri(uri)
+ URI.parse(uri).hostname.split('.').first
end
def federated_portal_name(key)
@@ -23,14 +40,10 @@ def federated_portal_light_color(key)
config[:'light-color'] if config
end
- def portal_name_from_uri(uri)
- URI.parse(uri).hostname.split('.').first
- end
-
def ontology_portal_config(id)
rest_url = id.split('/')[0..-3].join('/')
- $FEDERATED_PORTALS.select{|_, config| config[:api].start_with?(rest_url)}.first
+ federated_portals.select{|_, config| config[:api].start_with?(rest_url)}.first
end
def ontology_portal_name(id)
@@ -56,7 +69,7 @@ def ontoportal_ui_link(id)
end
def internal_ontology?(id)
- id.start_with?(helpers.rest_url)
+ id.start_with?(rest_url)
end
def federated_ontology?(id)
diff --git a/app/helpers/ontologies_helper.rb b/app/helpers/ontologies_helper.rb
index 4e05ad775..33adc9efd 100644
--- a/app/helpers/ontologies_helper.rb
+++ b/app/helpers/ontologies_helper.rb
@@ -104,8 +104,8 @@ def ontologies_browse_skeleton(pagesize = 5)
end
end
- def ontologies_filter_url(filters, page: 1, count: false)
- url = 'ontologies_filter?'
+ def ontologies_with_filters_url(filters, page: 1, count: false)
+ url = '/ontologies_filter?'
url += "page=#{page}" if page
url += "count=#{page}" if count
if filters
@@ -780,5 +780,12 @@ def id_to_acronym(id)
id.split('/').last
end
+ def browse_taxonomy_tooltip(texonomy)
+ content_tag(:div, class: 'd-flex') do
+ content_tag(:div, "See more information about #{texonomy} in ", class: 'mr-1') +
+ content_tag(:a, 'here', href: "/#{texonomy}", target: '_blank')
+ end
+ end
+
end
diff --git a/app/javascript/component_controllers/index.js b/app/javascript/component_controllers/index.js
index eaf1728f0..c0d3bcd20 100644
--- a/app/javascript/component_controllers/index.js
+++ b/app/javascript/component_controllers/index.js
@@ -26,7 +26,6 @@ import clipboard_component_controller from '../../components/clipboard_component
import range_slider_component_controller from '../../components/input/range_slider_component/range_slider_component_controller'
import RDFHighlighter from '../../components/display/rdf_highlighter_component/rdf_highlighter_component_controller'
-
application.register("rdf-highlighter", RDFHighlighter)
application.register('turbo-modal', TurboModalController)
application.register('file-input', FileInputLoaderController)
@@ -42,4 +41,4 @@ application.register('progress-pages', Progress_pages_component_controller)
application.register('reveal-component', Reveal_component_controller)
application.register('table-component', Table_component_controller)
application.register('clipboard', clipboard_component_controller)
-application.register('range-slider', range_slider_component_controller)
+application.register('range-slider', range_slider_component_controller)
\ No newline at end of file
diff --git a/app/views/admin/categories/_form.html.haml b/app/views/admin/categories/_form.html.haml
index a1abde741..75974b5a3 100644
--- a/app/views/admin/categories/_form.html.haml
+++ b/app/views/admin/categories/_form.html.haml
@@ -30,6 +30,11 @@
= t('admin.categories.form.description')
%td.top
= f.text_area :description, class: "form-control"
+ %tr
+ %th
+ = t('admin.categories.form.parent_category')
+ %td.top
+ = categories_select(id: 'category_parent_select', name: 'category[parentCategory]', selected: @category&.parentCategory)
- unless new_record
%tr
%th
diff --git a/app/views/home/cookies.html.haml b/app/views/home/cookies.html.haml
index 0a625a2be..d02f687a9 100644
--- a/app/views/home/cookies.html.haml
+++ b/app/views/home/cookies.html.haml
@@ -1,5 +1,5 @@
= turbo_frame_tag :cookies_modal do
- - if session[:cookies_accepted].nil? # don't re-render if a true/false selected
+ - if cookies[:cookies_accepted].nil? # don't re-render if a true/false selected
%section.cookies-modal
%h4
= t('cookies_modal.title')
diff --git a/app/views/layouts/_header.html.erb b/app/views/layouts/_header.html.erb
index 07d28d73d..1340bdbb2 100644
--- a/app/views/layouts/_header.html.erb
+++ b/app/views/layouts/_header.html.erb
@@ -57,7 +57,7 @@
<%= render partial: 'layouts/topnav' %>
-<%= turbo_frame_tag :cookies_modal, src: cookies_path if session[:cookies_accepted].nil? && !(Rails.env.development? || Rails.env.test?) %>
+<%= turbo_frame_tag :cookies_modal, src: cookies_path if cookies[:cookies_accepted].nil? && !(Rails.env.development? || Rails.env.test?) %>
<%= render partial: 'layouts/notices' %>
\ No newline at end of file
diff --git a/app/views/layouts/_notices.html.haml b/app/views/layouts/_notices.html.haml
index 8969a67d0..3700404d4 100644
--- a/app/views/layouts/_notices.html.haml
+++ b/app/views/layouts/_notices.html.haml
@@ -1,4 +1,4 @@
-- if Rails.env.appliance?
+- if session[:user]&.admin? && Rails.env.appliance?
= license_notification(current_license())
- flash.each do |key, message|
diff --git a/app/views/layouts/_topnav.html.haml b/app/views/layouts/_topnav.html.haml
index 4d0a01374..c73008dfe 100644
--- a/app/views/layouts/_topnav.html.haml
+++ b/app/views/layouts/_topnav.html.haml
@@ -60,4 +60,6 @@
= link_to(t('layout.header.cite_us'), $FOOTER_LINKS[:sections][:about][:cite_us], target: "_blank")
- s.item do
= link_to(t('layout.header.release_notes'), $FOOTER_LINKS[:sections][:products][:release_notes], target: "_blank")
+ - s.item do
+ = link_to(t('taxonomy.groups_and_categories'), '/groups')
diff --git a/app/views/layouts/appliance.html.haml b/app/views/layouts/appliance.html.haml
index d40fbdce6..3e306068c 100644
--- a/app/views/layouts/appliance.html.haml
+++ b/app/views/layouts/appliance.html.haml
@@ -26,7 +26,7 @@
%body{:class => "#{controller_name} #{action_name}"}
= render partial: "layouts/topnav"
- = turbo_frame_tag :cookies_modal, src: cookies_path if session[:cookies_accepted].nil?
+ = turbo_frame_tag :cookies_modal, src: cookies_path if cookies[:cookies_accepted].nil?
%div.flex-grow-1
= render partial: "layouts/notices"
diff --git a/app/views/ontologies/browser/_ontologies.html.haml b/app/views/ontologies/browser/_ontologies.html.haml
index 88ed7011c..3ca8685bc 100644
--- a/app/views/ontologies/browser/_ontologies.html.haml
+++ b/app/views/ontologies/browser/_ontologies.html.haml
@@ -1,6 +1,6 @@
= render InfiniteScrollComponent.new(id: 'ontologies_list',
collection: @ontologies,
- next_url: ontologies_filter_url(@request_params, page: @page.nextPage),
+ next_url: ontologies_with_filters_url(@request_params, page: @page.nextPage),
current_page: @page.page, next_page: @page.nextPage) do |c|
- if @page.page.eql?(1)
diff --git a/app/views/ontologies/browser/browse.html.haml b/app/views/ontologies/browser/browse.html.haml
index e5537d86c..e0695e73d 100644
--- a/app/views/ontologies/browser/browse.html.haml
+++ b/app/views/ontologies/browser/browse.html.haml
@@ -50,26 +50,29 @@
- @filters.each do |key, values|
- if session[:user]&.admin? || key != :missingStatus
- %div{data:{controller: "show-filter-count browse-filters", action: "change->show-filter-count#updateCount change->browse-filters#dispatchFilterEvent"}, id: "#{key}_filter_container"}
- = render DropdownContainerComponent.new(id: "browse-#{key}-filter", is_open: values[2].positive?) do |d|
- - d.title do
- = render Display::HeaderComponent.new do
- %span
- = browse_filter_section_label(key)
- %span.badge.badge-primary{"data-show-filter-count-target":"countSpan", style: "#{values[2] && values[2].positive? ? '' : 'display: none;'}"}
- = values[2]
-
- .browse-filter-checks-container.px-1
+ .browse-filter{data:{controller: "show-filter-count browse-filters", action: "change->show-filter-count#updateCount change->browse-filters#dispatchFilterEvent"}, id: "#{key}_filter_container", style: "#{"border-color: var(--admin-color);" if key == :missingStatus}"}
+ .browse-filter-title-bar{"data-target" => "#browse-#{key}-filter", "data-toggle" => "collapse"}
+ %p
+ = browse_filter_section_label(key)
+ %span.badge.badge-primary{"data-show-filter-count-target":"countSpan", style: "#{values[2] && values[2].positive? ? '' : 'display: none;'}"}
+ = values[2]
+ .d-flex.align-items-center
+ - if key.eql?(:categories) || key.eql?(:groups)
+ .mr-2
+ = render Display::InfoTooltipComponent.new(text: browse_taxonomy_tooltip(key.to_s))
+ = inline_svg_tag 'arrow-down.svg'
+ .collapse{id: "browse-#{key}-filter", class: "#{values[2].positive? ? 'show': ''}"}
+ .browse-filter-checks-container
- values.first.each do |object|
- title = (key.eql?(:categories) || key.eql?(:groups)) ? nil : ''
- = group_chip_component(name: key, object: object, checked: [link_last_part(object["id"]),link_last_part(object["value"])].include?(values[1]) , title: title) do |c|
+ = group_chip_component(name: key, object: object, checked: values[1].any?(link_last_part(object["id"])) || values[1].any?(link_last_part(object["value"])) , title: title) do |c|
- c.count do
%span.badge.badge-light.ml-1
= turbo_frame_tag "count_#{key}_#{link_last_part(object["id"])}", busy: true
%span.show-if-loading
= render LoaderComponent.new(small:true)
%div{data:{controller: "show-filter-count browse-filters", action: "change->show-filter-count#updateCount change->browse-filters#dispatchFilterEvent"}, id: "portals_filter_container"}
- = render DropdownContainerComponent.new(id: "browse-portal-filter", is_open: !request_portals.empty?, title: "Results from external portals") do
+ = render DropdownContainerComponent.new(id: "browse-portal-filter", is_open: !request_portals.empty?, title: t('federation.results_from_external_portals')) do
.browse-filter-checks-container.px-1
- federated_portals.each do |key, config|
= group_chip_component(name: "portals", object: { "acronym" => config[:name], "value" => key }, checked: request_portals.include?(key.to_s), title: '')
diff --git a/app/views/ontologies/sections/_metadata.html.haml b/app/views/ontologies/sections/_metadata.html.haml
index 044772ea6..be2083e5c 100755
--- a/app/views/ontologies/sections/_metadata.html.haml
+++ b/app/views/ontologies/sections/_metadata.html.haml
@@ -36,7 +36,7 @@
document.querySelector("[data-target='#projects_section']")?.click()
}
= properties_dropdown('methodology',t("ontologies.sections.methodology_and_provenance"), t("ontologies.sections.info_tooltip_properties_dropdown"), @methodology_properties)
- = properties_dropdown('community',t("ontologies.sections.community"), t("ontologies.sections.info_tooltip_properties_dropdown"), nil ) do |c|
+ = properties_dropdown('community',t("ontologies.sections.community"), t("ontologies.sections.info_tooltip_community_dropdown", site: portal_name), nil ) do |c|
- properties_list_component(c, @community_properties, truncate: false)
- unless Array(@ontology.group).empty?
- c.row do
@@ -44,7 +44,7 @@
= horizontal_list_container(@ontology.group) do |v|
= render ChipButtonComponent.new(text: show_group_name(v), type: "static", tooltip: show_group_name(v))
- = properties_dropdown('content',t("ontologies.sections.content"), t("ontologies.sections.info_tooltip_properties_dropdown"), nil) do |c|
+ = properties_dropdown('content',t("ontologies.sections.content"), t("ontologies.sections.info_tooltip_properties_dropdown", site: portal_name), nil) do |c|
- properties_list_component(c, @content_properties.reject{|k, v| %w[keyClasses metadataVoc].include?(k.to_s)})
- c.row do
= render FieldContainerComponent.new(label: attr_label('metadataVoc', attr_metadata: attr_metadata("metadataVoc"), show_tooltip: false)) do
diff --git a/app/views/properties/_show.html.haml b/app/views/properties/_show.html.haml
index d448430fe..f74964f85 100644
--- a/app/views/properties/_show.html.haml
+++ b/app/views/properties/_show.html.haml
@@ -14,6 +14,5 @@
- t.add_row({th: t('properties.type')}, {td: @property.type })
- t.add_row({th: t('properties.preferred_name')}, {td: display_in_multiple_languages(@property.label)}) unless @property.label.blank?
- t.add_row({th: t('properties.definitions')}, {td: display_in_multiple_languages(@property.definition)}) unless @property.definition.blank?
- - t.add_row({th: t('properties.parent')}, {td: display_in_multiple_languages(@property.parents)}) unless @property.parents.blank?
- - t.add_row({th: t('properties.domain')}, {td: get_link_for_cls_ajax(@property.domain, @acronym)}) unless @property.domain.blank?
- - t.add_row({th: t('properties.range')}, {td: get_link_for_cls_ajax(@property.range, @acronym)}) unless @property.range.blank?
\ No newline at end of file
+ - t.add_row({th: t('properties.domain')}, {td: get_link_for_cls_ajax(@property.domain, @acronym, '_top')}) unless @property.domain.blank?
+ - t.add_row({th: t('properties.range')}, {td: get_link_for_cls_ajax(@property.range, @acronym, '_top')}) unless @property.range.blank?
diff --git a/app/views/search/index.html.haml b/app/views/search/index.html.haml
index e11944d80..b8895ced4 100644
--- a/app/views/search/index.html.haml
+++ b/app/views/search/index.html.haml
@@ -17,7 +17,7 @@
= ontologies_selector(id:'search_page_ontologies' ,name: 'ontologies[]', selected: params[:ontologies]&.split(','))
.filter-container
.title
- Results from external portals
+ = t('federation.results_from_external_portals')
.field.d-flex
- federated_portals.each do |key, config|
= group_chip_component(name: "portals[]", object: { "acronym" => config[:name], "value" => key }, checked: request_portals.include?(key.to_s), title: '')
diff --git a/app/views/taxonomy/_taxonomies.html.haml b/app/views/taxonomy/_taxonomies.html.haml
new file mode 100644
index 000000000..0dd56f687
--- /dev/null
+++ b/app/views/taxonomy/_taxonomies.html.haml
@@ -0,0 +1,10 @@
+.taxonomy-section
+ - pairs, impairs = taxonomies.each_with_index.partition { |_, index| index.even? }
+ - taxonomies_first_row = pairs.map(&:first)
+ - taxonomies_second_row = impairs.map(&:first)
+ .first-row
+ - taxonomies_first_row.each do |taxonomy|
+ = render Display::TaxonomyCardComponent.new(taxonomy: taxonomy, ontologies_names: @ontologies_names)
+ .second-row
+ - taxonomies_second_row.each do |taxonomy|
+ = render Display::TaxonomyCardComponent.new(taxonomy: taxonomy, ontologies_names: @ontologies_names)
\ No newline at end of file
diff --git a/app/views/taxonomy/index.html.haml b/app/views/taxonomy/index.html.haml
new file mode 100644
index 000000000..967f63d33
--- /dev/null
+++ b/app/views/taxonomy/index.html.haml
@@ -0,0 +1,24 @@
+.taxonomy-page-container
+ .taxonomy-page-subcontainer
+ .taxonomy-page-title
+ .text
+ = t('taxonomy.groups_and_categories')
+ .line
+ .taxonomy-page-decription
+ = t('taxonomy.description')
+
+ = render TabsContainerComponent.new do |c|
+ - c.item(title: 'Groups', selected: !@category_section_active)
+ - c.item_content do
+ = render partial: '/taxonomy/taxonomies', locals: { taxonomies: @groups }
+
+ - c.item(title: 'Categories', selected: @category_section_active)
+ - c.item_content do
+ = render partial: '/taxonomy/taxonomies', locals: { taxonomies: @categories }
+:javascript
+ document.getElementById('categories_tab').addEventListener('click', function(event) {
+ window.history.pushState({ path: '/categories' }, '', '/categories');
+ })
+ document.getElementById('groups_tab').addEventListener('click', function(event) {
+ window.history.pushState({ path: '/groups' }, '', '/groups');
+ })
\ No newline at end of file
diff --git a/config/bioportal_config_env.rb.sample b/config/bioportal_config_env.rb.sample
index 2d4517fbc..352805b19 100644
--- a/config/bioportal_config_env.rb.sample
+++ b/config/bioportal_config_env.rb.sample
@@ -40,52 +40,6 @@ $NCBO_API_KEY = ENV['NCBO_API_KEY']
$FAIRNESS_DISABLED = ENV['FAIRNESS_DISABLED']
$FAIRNESS_URL = ENV['FAIRNESS_URL']
-
-# Federation configuration
-$FEDERATED_PORTALS = {
- bioportal: {
- name: "BioPortal",
- api: 'https://data.bioontology.org/',
- ui: 'https://bioportal.bioontology.org/',
- apikey: '8b5b7825-538d-40e0-9e9e-5ab9274a9aeb',
- color: '#234979',
- 'light-color': '#E9F2FA',
- },
- agroportal: {
- name: "AgroPortal",
- api: 'https://data.agroportal.lirmm.fr',
- ui: 'https://agroportal.lirmm.fr',
- apikey: '1de0a270-29c5-4dda-b043-7c3580628cd5',
- color: '#349696',
- 'light-color': '#F1F6FA',
- },
- ecoportal: {
- name: "EcoPortal",
- api: 'https://data.ecoportal.lifewatch.eu/',
- ui: 'https://ecoportal.lifewatch.eu',
- apikey: "43a437ba-a437-4bf0-affd-ab520e584719",
- color: '#2076C9',
- 'light-color': '#E9F2FA',
- },
- # earthportal: {
- # name: 'EarthPortal',
- # api: 'https://earthportal.eu:8443/',
- # ui: 'https://earthportal.eu',
- # apikey: "c9147279-954f-41bd-b068-da9b0c441288",
- # color: '#404696',
- # 'light-color': '#404696'
- # },
- biodivportal: {
- name: "BioDivPortal",
- api: 'https://data.biodivportal.gfbio.org/',
- ui: 'https://biodivportal.gfbio.org/',
- apikey: "47a57aa3-7b54-4f34-b695-dbb5f5b7363e",
- color: '#349696',
- 'light-color': '#EBF5F5',
- }
-}
-
-
# Used to define other bioportal that can be mapped to
# Example to map to ncbo bioportal : {"ncbo" => {"api" => "http://data.bioontology.org", "ui" => "http://bioportal.bioontology.org", "apikey" => ""}
# Then create the mapping using the following class in JSON : "http://purl.bioontology.org/ontology/MESH/C585345": "ncbo:MESH"
diff --git a/config/locales/en.yml b/config/locales/en.yml
index aaa6d077f..fb54a1cef 100644
--- a/config/locales/en.yml
+++ b/config/locales/en.yml
@@ -203,6 +203,7 @@ en:
description: Description
created: Created
ontologies: Ontologies
+ parent_category: Parent category
edit:
edit_category: Edit category
save: Save
@@ -1275,6 +1276,7 @@ en:
community: Community
content: Content
info_tooltip_properties_dropdown: Metadata properties primarily encompass the design, methods, and actions to create the ontology. This includes elements such as the tools and software employed by the creator of the ontology during its configuration.
+ info_tooltip_community_dropdown: Metadata properties related to community information such as the code repository and issue tracker, the mailing list or the target audience. This includes also the Groups in %{site}. See more information about Groups and Categories.
visits: Visits
views: Views of %{acronym}
create_new_view: Create new view
@@ -1490,4 +1492,11 @@ en:
paragraph1: "%{portal} uses cookies to help you navigate efficiently and for audience measurement. You will find detailed information about all cookies in the \"Privacy policy\" link"
paragraph2: "The cookies are functional and non-optional. By staying on %{portal}, you acknowledge the information was delivered to you."
accept_button: "Accept"
- privacy_link: "Privacy policy"
\ No newline at end of file
+ privacy_link: "Privacy policy"
+ taxonomy:
+ groups_and_categories: Groups and Categories
+ description: In AgroPortal, ontologies are organized in groups and tagged with categories. Typically, groups associate ontologies from the same project or organization for better identification of the provenance. Whereas categories are about subjects/topics and enable to classify ontologies. As of 2016, AgroPortal's categories were established in cooperation with FAO AIMS. In 2024, we moved to UNESCO nomenclature for fields of science and technology. Groups and categories, along with other metadata, can be used on the “Browse” page of AgroPortal to filter out the list of ontologies.
+ show_sub_categories: Show sub categories
+
+ federation:
+ results_from_external_portals: Results from external portals
\ No newline at end of file
diff --git a/config/locales/fr.yml b/config/locales/fr.yml
index a529cb847..34c68bafa 100644
--- a/config/locales/fr.yml
+++ b/config/locales/fr.yml
@@ -209,6 +209,7 @@ fr:
description: Description
created: Créé
ontologies: Ontologies
+ parent_category: Catégorie parent
edit:
edit_category: Modifier la catégorie
save: Sauvegarder
@@ -1301,6 +1302,7 @@ fr:
community: Communauté
content: Contenu
info_tooltip_properties_dropdown: Propriétés de métadonnées englobant principalement la conception, les méthodes et les actions pour créer l'ontologie. Cela inclut des éléments tels que les outils et logiciels utilisés par le créateur de l'ontologie lors de sa configuration.
+ info_tooltip_community_dropdown: Propriétés des métadonnées liées aux informations communautaires telles que le dépôt de code et le suivi des problèmes, la liste de diffusion ou le public cible. Cela inclut également les Groupes dans %{site}. Voir plus d'informations sur les Groupes et les Catégories.
visits: Visites
views: Vues de %{acronym}
create_new_view: Créer une nouvelle vue
@@ -1529,4 +1531,10 @@ fr:
paragraph1: "%{portal} utilise des cookies pour vous aider à naviguer efficacement et pour mesurer l'audience. Vous trouverez des informations détaillées sur tous les cookies dans le lien \"Vie privé\""
paragraph2: "Les cookies sont fonctionnels et non facultatifs. En restant sur %{portal}, vous reconnaissez que les informations vous ont été transmises."
accept_button: "Accepter"
- privacy_link: "Vie privé"
\ No newline at end of file
+ privacy_link: "Vie privé"
+ taxonomy:
+ groups_and_categories: Groupes et Catégories
+ description: Dans AgroPortal, les ontologies sont organisées en groupes et étiquetées avec des catégories. Typiquement, les groupes associent des ontologies provenant du même projet ou de la même organisation pour une meilleure identification de la provenance. Tandis que les catégories concernent des sujets/thématiques et permettent de classifier les ontologies. En 2016, les catégories d'AgroPortal ont été établies en coopération avec FAO AIMS. En 2024, nous sommes passés à la nomenclature de l'UNESCO pour les domaines des sciences et des technologies. Les groupes et les catégories, ainsi que d'autres métadonnées, peuvent être utilisés sur la page “Parcourir” d'AgroPortal pour filtrer la liste des ontologies.
+ show_sub_categories: Afficher les sous-catégories
+ federation:
+ results_from_external_portals: Résultats provenant de portails externes
diff --git a/config/routes.rb b/config/routes.rb
index bc191bc10..b28c26ec0 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -208,6 +208,9 @@
get '/login_as/:login_as' => 'login#login_as', constraints: { login_as: /[\d\w\.\-\%\+ ]+/ }
post '/login/send_pass', to: 'login#send_pass'
+ get '/groups' => 'taxonomy#index'
+ get '/categories' => 'taxonomy#index'
+
# Search
get 'search', to: 'search#index'
get 'ajax/search/ontologies/content', to: 'search#json_ontology_content_search'