diff --git a/app/assets/stylesheets/application.css b/app/assets/stylesheets/application.css index 01f992a..a388563 100644 --- a/app/assets/stylesheets/application.css +++ b/app/assets/stylesheets/application.css @@ -14,6 +14,9 @@ *= require_self */ +body { + font-family: Garamond, Georgia, serif; +} .breadcrumb { font-size: 2em; @@ -35,4 +38,15 @@ .aka abbr { font-size: 0.8em; +} + +.identifier { + color: grey; + font-size: 0.5em; + vertical-align: top; +} + +.identifier a { + margin: 0 3px; + vertical-align: inherit; } \ No newline at end of file diff --git a/app/controllers/subjects_controller.rb b/app/controllers/subjects_controller.rb new file mode 100644 index 0000000..0070d85 --- /dev/null +++ b/app/controllers/subjects_controller.rb @@ -0,0 +1,32 @@ +class SubjectsController < ApplicationController + + + def show + @subject = Subject.find_by(scheme: 'mesh', identifier: params[:id]) + + @trees = [] + + @subject.tree_numbers.each do |tree_number| + + parent_tree_numbers = [tree_number] + + while !tree_number.blank? + + tree_number = tree_number.gsub(/\.?[^\/\.]+\z/, '') + parent_tree_numbers << tree_number unless tree_number.blank? + + end + + @trees << Subject.select('*') + .from("(select *, unnest(tree_numbers) as tree_number from subjects) as subjects") + .where(tree_number: parent_tree_numbers) + .order(:tree_number) + + end + + @records = @subject.records.select(:identifier, :title).limit(50) + + end + + +end diff --git a/app/models/subject.rb b/app/models/subject.rb index 6c08052..91441aa 100644 --- a/app/models/subject.rb +++ b/app/models/subject.rb @@ -5,4 +5,18 @@ def records Record.where("metadata->'650' @> '[{\"0\" : \"#{identifier}\"}]'::jsonb") end + def related_subjects + + @related_subjects ||= begin + + if related_identifiers.length > 0 + Subject.where(identifier: related_identifiers) + else + [] + end + + end + + end + end diff --git a/app/views/shared/_records.html.erb b/app/views/shared/_records.html.erb new file mode 100644 index 0000000..da6538c --- /dev/null +++ b/app/views/shared/_records.html.erb @@ -0,0 +1,16 @@ +<% if records.length > 0 %> + + <% if records.length == 50 %> +

50+ Wellcome Library records

+ <% else %> +

<%= pluralize(@records.length, 'Wellcome Library record') %>

+ <% end %> + + +<% else %> +

There’s nothing in the Wellcome Library collection about this (yet).

+<% end %> \ No newline at end of file diff --git a/app/views/shared/_related_subjects.html.erb b/app/views/shared/_related_subjects.html.erb new file mode 100644 index 0000000..4bd2695 --- /dev/null +++ b/app/views/shared/_related_subjects.html.erb @@ -0,0 +1,6 @@ +<% if related_subjects.length > 0 %> +

Related: + <%= related_subjects.collect do |subject| %> + <% link_to(subject.label, subject_path(subject.identifier)) %> + <% end.join(', ').html_safe %> +<% end %> \ No newline at end of file diff --git a/app/views/subjects/show.html.erb b/app/views/subjects/show.html.erb new file mode 100644 index 0000000..7df7d0a --- /dev/null +++ b/app/views/subjects/show.html.erb @@ -0,0 +1,26 @@ +<% @trees.each do |tree| %> + +

+ <%= link_to 'Top', '/tree' %> / + <%= tree.collect do |subject| %> + <% link_to subject.label, "/tree/#{subject.tree_number.gsub('.', '/')}" %> + <% end.join(" / ").html_safe %> +

+ +<% end %> + +

<%= @subject.label %>

+ +<% if @subject.all_labels.length > 1 %> +

Also known as: <%= (@subject.all_labels - [@subject.label]).collect {|s| content_tag('b', s)}.join(', ').html_safe %>.

+<% end %> + +<%= render 'shared/related_subjects', related_subjects: @subject.related_subjects %> + +

+ <%= @subject.description %> +

+ + + +<%= render 'shared/records', records: @records %> \ No newline at end of file diff --git a/app/views/tree/show.html.erb b/app/views/tree/show.html.erb index a38ddd0..e1c122a 100644 --- a/app/views/tree/show.html.erb +++ b/app/views/tree/show.html.erb @@ -4,12 +4,16 @@ <%= @parent_subjects.collect {|s| link_to(s.label, "/tree/#{s.tree_number.gsub('.', '/')}") + ' /' }.join(' ').html_safe %>

<%= @subject.label %>

+ (<%= link_to @subject.identifier, subject_path(@subject.identifier) %>) <% if @subject.all_labels.length > 1 %>

Also known as: <%= (@subject.all_labels - [@subject.label]).collect {|s| content_tag('b', s)}.join(', ').html_safe %>.

<% end %> +<%= render 'shared/related_subjects', related_subjects: @subject.related_subjects %> + +

<%= @subject.description %>

@@ -19,19 +23,4 @@ <%= render 'tree', subjects: @child_subjects %> <% end %> -<% if @records.length > 0 %> - - <% if @records.length == 50 %> -

50+ Wellcome Library records

- <% else %> -

<%= pluralize(@records.length, 'Wellcome Library record') %>

- <% end %> - - -<% else %> -

There’s nothing in the Wellcome Library collectiona about this (yet).

-<% end %> \ No newline at end of file +<%= render 'shared/records', records: @records %> \ No newline at end of file diff --git a/config/routes.rb b/config/routes.rb index 07f23c9..255ee9a 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -4,6 +4,8 @@ resources :tree, only: [:index, :show], constraints: {id: /[^\.]+/} + resources :subjects, only: :show, path: '' + root 'home#show' end