Thanks again, Joshua,
Our jhu_public_branding plugin translated from Bootstrap 3 to Bootstrap 4, and all is well -- with that plugin.
Our jhu_public_customizations plugin (responsible for some formatting on the our homepage, for breadcrumbs, etc.), not so much.
I'm hoping you, and any other plugin developers here, might take a look. I have to flavors of error:
D, [2025-08-14T18:08:04.332943 #77] DEBUG -- : [7ee57082-e4fc-498d-807f-556c42eee59f] Rendered shared/_digital.html.erb (Duration: 5.6ms | Allocations: 0)
D, [2025-08-14T18:08:04.429300 #77] DEBUG -- : [7ee57082-e4fc-498d-807f-556c42eee59f] Rendered shared/_single_note.html.erb (Duration: 73.1ms | Allocations: 0)
D, [2025-08-14T18:08:04.430537 #77] DEBUG -- : [7ee57082-e4fc-498d-807f-556c42eee59f] Rendered /archivesspace/plugins/jhu_public_customization/public/views/shared/_record_innards.html.erb (Duration: 94.4ms | Allocations: 0)
I, [2025-08-14T18:08:04.432856 #77] INFO -- : [7ee57082-e4fc-498d-807f-556c42eee59f] Rendered resources/show.html.erb within layouts/application (Duration: 401.4ms | Allocations: 0)
I, [2025-08-14T18:08:04.455188 #77] INFO -- : [7ee57082-e4fc-498d-807f-556c42eee59f] Rendered layout layouts/application.html.erb (Duration: 424.3ms | Allocations: 0)
I, [2025-08-14T18:08:04.457239 #77] INFO -- : [7ee57082-e4fc-498d-807f-556c42eee59f] Completed 500 Internal Server Error in 2902ms (Allocations: 0)
F, [2025-08-14T18:08:04.466326 #77] FATAL -- : [7ee57082-e4fc-498d-807f-556c42eee59f]
[7ee57082-e4fc-498d-807f-556c42eee59f] ActionView::Template::Error (undefined local variable or method `calling_partial' for #<ActionView::Base:0x000000000035d8>):
[7ee57082-e4fc-498d-807f-556c42eee59f] 22: </div>
[7ee57082-e4fc-498d-807f-556c42eee59f] 23: <% end %>
[7ee57082-e4fc-498d-807f-556c42eee59f] 24: <% else %>
[7ee57082-e4fc-498d-807f-556c42eee59f] 25: <%= render partial: 'shared/note_content', locals: { :content => note_struct['note_text'], :is_inherited => note_struct['is_inherited'], :type => type, :calling_partial => calling_partial } %>
[7ee57082-e4fc-498d-807f-556c42eee59f] 26: <% end %>
[7ee57082-e4fc-498d-807f-556c42eee59f] 27: </div>
[7ee57082-e4fc-498d-807f-556c42eee59f] 28: <% end %>
[7ee57082-e4fc-498d-807f-556c42eee59f]
[7ee57082-e4fc-498d-807f-556c42eee59f] app/views/shared/_single_note.html.erb:25
[7ee57082-e4fc-498d-807f-556c42eee59f] app/views/resources/show.html.erb:44
[7ee57082-e4fc-498d-807f-556c42eee59f] app/controllers/application_controller.rb:91:in `set_locale'
###################################################################################################
D, [2025-08-14T18:08:50.851599 #77] DEBUG -- : Thread-5956: Responded with [200, {"cache-control"=>"private, must-revalidate, max-age=0", "content-type"=>"application/json", "content-length"=>"379973"}, ["{\"page_size\":1,\"first_page\":1,\"last_page\":1,\"this_page\":1,\"offset_first\":1,\"offset_last\":1,\"total_hits\":1,\"results\":[{\"id\":\"/repositories/3/resources/1045\",\"uri\":\"/repositories/3/resources/1045\",\"title\":\"Daniel Coit Gilman papers\",\"title_ws\":\"Daniel Coit Gilman papers\",\"primary_type\":\"resource\",\"types\":[\"resource\",\"pui_collection\",\"pui\"]... in 49ms
I, [2025-08-14T18:08:50.873159 #77] INFO -- : [2dded8a3-afec-431d-854e-d70a05149d96] Completed 500 Internal Server Error in 268ms (Allocations: 0)
F, [2025-08-14T18:08:50.874407 #77] FATAL -- : [2dded8a3-afec-431d-854e-d70a05149d96]
[2dded8a3-afec-431d-854e-d70a05149d96] ArgumentError (wrong number of arguments (given 1, expected 2)):
[2dded8a3-afec-431d-854e-d70a05149d96]
[2dded8a3-afec-431d-854e-d70a05149d96] app/models/concerns/tree_nodes.rb:28:in `breadcrumb_identifier'
[2dded8a3-afec-431d-854e-d70a05149d96] app/controllers/objects_controller.rb:101:in `show'
[2dded8a3-afec-431d-854e-d70a05149d96] app/controllers/application_controller.rb:91:in `set_locale'
I am pretty sure the first error has something to do with our plugin's _record_innards.html.erb:
<!-- Look for '_inherited' and '*_inherited' properties -->
<% non_folder = %w(summary langmaterial physdesc accessrestrict userestrict) %>
<% folder = %w(abstract bioghist scopecontent arrangement phystech physloc otherfindaid custodhist acqinfo appraisal accruals originalsloc altformavail extent relatedmaterial separatedmaterial note_bibliography materialspec physdesc inscription physfacet dimensions edition fileplan legalstatus odd note processinfo note_index) %>
<div class="upper-record-details mb-4 p-3 bg-light rounded">
<% # use Abstract as overview, if it is available
over = @result.note('abstract')
folder -= ['abstract']
if over.blank?
# fall back to Scope & Content Note, if no overview yet
over = @result.note('scopecontent')
folder -= ['scopecontent']
end
%>
<% unless over.blank? %>
<%= render partial: 'shared/single_note', locals: {:type => 'abstract', :note_struct => over, :notitle => true} %>
<% end %>
<% unless @result.dates.blank? %>
<h3><%= t('resource._public.dates') %></h3>
<%= render partial: 'shared/dates', locals: {:dates => @result.dates} %>
<% end %>
<% if @result.agents && Array(@result.agents['creator']).length > 0 %>
<% a_direct_creator = @result.agents['creator'].reject{|r| r['_inherited']}.take(1) %>
<% unless a_direct_creator.empt
<% if @result.kind_of?(Resource) && !@result.related_accessions.blank? %>
<% x = render partial: 'resources/related_accessions', locals: {:accessions => @result.related_accessions} %>
<%= render partial: 'sharedy? %>
<%= render partial: 'shared/agents_list', locals: {:list => {'creator' => a_direct_creator}} %>
<% end %>
<% end %>
<% non_folder.each do |type| %>
<% note_struct = @result.note(type) %>
<% unless note_struct['note_text'].blank? %>
<%= render partial: 'shared/single_note', locals: {:type => type, :note_struct => note_struct} %>
<% end %>
<% end %>
<% unless @result.extents.blank? %>
<h3 class="mt-4"><%= t('resource._public.extent') %></h3>
<% @result.extents.each do |ext| %>
<p class="extent mb-2"><%= inheritance(ext['_inherited']).html_safe %>
<%= ext['display']%>
</p>
<% end %>
<% end %>
<% if @result.is_a?(Accession) && @result.inventory %>
<h3><%= t('accession._public.section.inventory') %></h3>
<p><%= @result.inventory %></p>
<% end %>
<% ASUtils.find_local_directories('public/views/_upper_record_innards.html.erb').each do |template| %>
<%= render :file => template if File.exists?(template) %>
<% end %>
</div>
<div class="acc_holder clear clearfix mt-4">
<div class="accordion" id="res_accordion">
<% x = render partial: 'shared/multi_notes', locals: {:types => folder} %>
<% unless x.blank? %>
<%= render partial: 'shared/accordion_panel', locals: {:p_title => t('resource._public.additional'),
:p_id => 'add_desc', :p_body => x } %>
<% end %>
<% if @result.kind_of?(Accession) && !@result.deaccessions.blank? %>
<% x = render partial: 'shared/present_list', locals: {:list => @result.deaccessions.collect{|d| d.fetch('description')}, :list_clss => 'deaccessions'} %>
<%= render partial: 'shared/accordion_panel', locals: {:p_title => t('deaccessions'), :p_id => 'deaccessions_list', :p_body => x} %>
<% end %>
<% unless @result.subjects.blank? %>
<% x= render partial: 'shared/present_list', locals: {:list => @result.subjects, :list_clss => 'subjects_list'} %>
<%= render partial: 'shared/accordion_panel', locals: {:p_title => t('subject._plural'),
:p_id => 'subj_list', :p_body => x} %>
<% end %>
<% unless @result.classifications.blank? %>
<% x= render partial: 'classifications/related_listing', locals: {:classifications => @result.classifications} %>
<%= render partial: 'shared/accordion_panel', locals: {:p_title => t('classification._plural'),
:p_id => 'classifications_list', :p_body => x} %>
<% end %>
<% unless @result.agents.blank? %>
<% x= render partial: 'shared/agents_list', locals: {:list => @result.agents} %>
<%= render partial: 'shared/accordion_panel', locals: {:p_title => t('pui_agent.related'),
:p_id => 'agent_list', :p_body => x} %>
<% end %>
<% unless @result.linked_digital_objects.blank? %>
<% x = render partial: 'resources/linked_digital_objects', locals: {:digital_objects => @result.linked_digital_objects} %>
<%= render partial: 'shared/accordion_panel', locals: {:p_title => t('linked_digital_objects'), :p_id => 'linked_digital_objects_list', :p_body => x} %>
<% end %>
<%# false: always exclude the Finding Aid info accordian %>
<% if false && @result.kind_of?(Resource) && !@result.finding_aid.blank? %>
<% x= render partial: 'resources/finding_aid' %>
<%= render partial: 'shared/accordion_panel', locals: {:p_title => t('resource._public.finding_aid.head'),
:p_id => 'fa', :p_body => x} %>
<% end %>
<% unless @result.container_titles_and_uris.blank? %>
<% x = render partial: 'shared/present_list', locals: {:list => @result.container_titles_and_uris, :list_clss => 'top_containers'} %>
<%= render partial: 'shared/accordion_panel', locals: {:p_title => t('containers'), :p_id => 'cont_list',
:p_body => x} %>
<% end %>
<% if @result.kind_of?(DigitalObject) && !@result.linked_instances.blank? %>
<% x = render partial: 'digital_objects/linked_instances', locals: {:instances => @result.linked_instances} %>
<%= render partial: 'shared/accordion_panel', locals: {:p_title => t('linked_instances'), :p_id => 'linked_instances_list', :p_body => x} %>
<% end %>
<% unless @result.external_documents.blank? %>
<% x = render partial: 'shared/present_list_external_docs', locals: {:list => @result.external_documents, :list_clss => 'external_docs'} %>
<%= render partial: 'shared/accordion_panel', locals: {:p_title => t('external_docs'), :p_id => 'ext_doc_list', :p_body => x} %>
<% end %>
<% unless @repo_info.blank? || @rep
<% if @result.kind_of?(Resource) && !@result.related_accessions.blank? %>
<% x = render partial: 'resources/related_accessions', locals: {:accessions => @result.related_accessions} %>
<%= render partial: 'sharedo_info['top']['name'].blank? %>
<% x= render partial: 'repositories/repository_details' %>
<%= render partial: 'shared/accordion_panel', locals: {:p_title => t('repository.details'),
:p_id => 'repo_deets', :p_body => x} %>
<% end %>
<% if @result.kind_of?(Resource) && !@result.related_accessions.blank? %>
<% x = render partial: 'resources/related_accessions', locals: {:accessions => @result.related_accessions} %>
<%= render partial: 'shared/accordion_panel', locals: {:p_title => t('related_accessions'), :p_id => 'related_accessions_list', :p_body => x} %>
<% end %>
<% if @result.kind_of?(Accession) && !@result.related_resources.blank? %>
<% x = render partial: 'accessions/related_resources', locals: {:resources => @result.related_resources} %>
<%= render partial: 'shared/accordion_panel', locals: {:p_title => t('related_resources'), :p_id => 'related_resources_list', :p_body => x} %>
<% end %>
</div>
<% ASUtils.find_local_directories('public/views/_lower_record_innards.html.erb').each do |template| %>
<%= render :file => template if File.exists?(template) %>
<% end %>
</div>
<script type="text/javascript" >initialize_accordion(".note_panel", "<%= t('accordion.expand') %>" , "<%= t('accordion.collapse') %>");
</script>
And I have no clue about Error 2: "ArgumentError (wrong number of arguments (given 1, expected 2)):"
I just don't know if there is something I'm missing in the Bootstrap3-->4 translation, or if it's something else. Another set of eyeballs on this, by someone who has written these sorts of plugins, GREATLY appreciated,
Mark
<><><><><><><><><><><><><><><><><><><><><><>
Mark Cyzyk, M.A., M.L.S.
Library Applications Group
The Sheridan Libraries
The Johns Hopkins University