blacklight 3.1.2 → 3.2.0pre1
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +5 -2
- data/README.md +7 -2
- data/VERSION +1 -1
- data/app/assets/images/favicon.ico +0 -0
- data/app/assets/javascripts/blacklight/blacklight.js +23 -1
- data/app/assets/stylesheets/blacklight/_catalog.css.scss +369 -0
- data/app/assets/stylesheets/blacklight/_facets.css.scss +117 -0
- data/app/assets/stylesheets/blacklight/_folder.css.scss +38 -0
- data/app/assets/stylesheets/blacklight/_formatting.css.scss +164 -0
- data/app/assets/stylesheets/blacklight/_header.css.scss +36 -0
- data/app/assets/stylesheets/blacklight/_layout.css.scss +79 -0
- data/app/assets/stylesheets/blacklight/_print.css.scss +54 -0
- data/app/assets/stylesheets/blacklight/_search_history.css.scss +44 -0
- data/app/assets/stylesheets/blacklight/_susy_framework.css.scss +228 -0
- data/app/assets/stylesheets/blacklight/blacklight.css.scss +27 -0
- data/app/assets/stylesheets/blacklight/blacklight_defaults.css.scss +48 -0
- data/app/controllers/bookmarks_controller.rb +2 -1
- data/app/controllers/folder_controller.rb +4 -0
- data/app/controllers/saved_searches_controller.rb +4 -0
- data/app/controllers/search_history_controller.rb +4 -0
- data/app/helpers/blacklight/blacklight_helper_behavior.rb +64 -104
- data/app/helpers/blacklight/catalog_helper_behavior.rb +4 -4
- data/app/helpers/blacklight/facets_helper_behavior.rb +52 -5
- data/app/helpers/blacklight/render_constraints_helper_behavior.rb +14 -59
- data/app/helpers/blacklight/search_history_constraints_helper_behavior.rb +56 -0
- data/app/helpers/search_history_constraints_helper.rb +3 -0
- data/app/models/record_mailer.rb +1 -2
- data/app/views/_flash_msg.html.erb +4 -5
- data/app/views/_user_util_links.html.erb +3 -1
- data/app/views/bookmarks/index.html.erb +2 -2
- data/app/views/catalog/_bookmark_control.html.erb +6 -6
- data/app/views/catalog/_facet_layout.html.erb +4 -0
- data/app/views/catalog/_facet_limit.html.erb +20 -33
- data/app/views/catalog/_facets.html.erb +1 -5
- data/app/views/catalog/_folder_control.html.erb +5 -5
- data/app/views/catalog/_index_default.html.erb +1 -1
- data/app/views/catalog/_search_form.html.erb +4 -3
- data/app/views/catalog/_show_default.html.erb +1 -1
- data/app/views/catalog/_show_tools.html.erb +6 -6
- data/app/views/catalog/_sort_and_per_page.html.erb +1 -1
- data/app/views/catalog/index.atom.builder +2 -2
- data/app/views/catalog/index.rss.builder +1 -1
- data/app/views/catalog/opensearch.xml.builder +10 -0
- data/app/views/catalog/show.html.erb +1 -1
- data/app/views/folder/_tools.html.erb +4 -4
- data/app/views/layouts/blacklight.html.erb +25 -37
- data/app/views/record_mailer/email_record.text.erb +1 -1
- data/app/views/record_mailer/sms_record.text.erb +2 -2
- data/app/views/search_history/index.html.erb +1 -1
- data/blacklight.gemspec +11 -9
- data/lib/{generators/blacklight/templates/SolrMarc.jar → SolrMarc.jar} +0 -0
- data/lib/blacklight.rb +5 -3
- data/lib/blacklight/catalog.rb +3 -4
- data/lib/blacklight/configurable.rb +54 -39
- data/lib/blacklight/configuration.rb +126 -0
- data/lib/blacklight/configuration/fields.rb +142 -0
- data/lib/blacklight/configuration/search_field.rb +12 -0
- data/lib/blacklight/configuration/solr_field.rb +12 -0
- data/lib/blacklight/configuration/sort_field.rb +17 -0
- data/lib/blacklight/controller.rb +16 -14
- data/lib/blacklight/engine.rb +1 -1
- data/lib/blacklight/global_configurable.rb +46 -0
- data/lib/blacklight/search_fields.rb +21 -54
- data/lib/blacklight/solr/document.rb +13 -3
- data/lib/blacklight/solr_helper.rb +88 -52
- data/lib/blacklight/utils.rb +18 -0
- data/lib/generators/blacklight/assets_generator.rb +14 -20
- data/lib/generators/blacklight/blacklight_generator.rb +14 -6
- data/lib/generators/blacklight/jetty_generator.rb +1 -1
- data/lib/generators/blacklight/templates/assets/standard.css.scss +51 -0
- data/lib/generators/blacklight/templates/catalog_controller.rb +148 -0
- data/lib/generators/blacklight/templates/config/blacklight_config.rb +2 -239
- data/lib/generators/blacklight/templates/config/sass.rb +5 -0
- data/lib/generators/blacklight/templates/solr_conf/schema.xml +514 -164
- data/lib/generators/blacklight/templates/solr_conf/solrconfig.xml +1591 -323
- data/lib/generators/blacklight/templates/solr_document.rb +2 -0
- data/lib/railties/all_tests.rake +36 -3
- data/lib/railties/blacklight_cucumber.rake +6 -4
- data/lib/railties/blacklight_rspec.rake +5 -4
- data/test_support/bin/run-tests.sh +2 -13
- data/test_support/bin/test.sh +30 -23
- data/test_support/features/did_you_mean.feature +14 -13
- data/test_support/features/step_definitions/saved_searches_steps.rb +1 -1
- data/test_support/features/step_definitions/search_steps.rb +4 -4
- data/test_support/spec/controllers/application_controller_spec.rb +3 -13
- data/test_support/spec/controllers/catalog_controller_spec.rb +102 -24
- data/test_support/spec/controllers/folder_controller_spec.rb +7 -1
- data/test_support/spec/helpers/blacklight_helper_spec.rb +45 -34
- data/test_support/spec/helpers/facets_helper_spec.rb +68 -0
- data/test_support/spec/helpers/html_head_helper_spec.rb +37 -0
- data/test_support/spec/helpers/{render_constraints_helper_spec.rb → search_history_constraints_helper_spec.rb} +26 -7
- data/test_support/spec/lib/blacklight_configurable_spec.rb +92 -0
- data/test_support/spec/lib/blacklight_configuration_spec.rb +295 -0
- data/test_support/spec/lib/{configurable_spec.rb → global_configurable_spec.rb} +2 -2
- data/test_support/spec/lib/search_fields_spec.rb +26 -29
- data/test_support/spec/{helpers → lib}/solr_helper_spec.rb +268 -287
- data/test_support/spec/lib/tasks/solr_marc_task_spec.rb +1 -1
- data/test_support/spec/lib/utils_spec.rb +58 -0
- data/test_support/spec/models/solr_docment_spec.rb +4 -8
- data/test_support/spec/views/catalog/_facets.html.erb_spec.rb +27 -170
- data/test_support/spec/views/catalog/_index_default.erb_spec.rb +38 -20
- data/test_support/spec/views/catalog/_show_default.erb_spec.rb +38 -19
- data/test_support/spec/views/catalog/index.atom.builder_spec.rb +19 -1
- metadata +148 -145
- data/app/assets/stylesheets/blacklight/blacklight.css +0 -493
- data/app/assets/stylesheets/yui.css +0 -31
- data/app/views/catalog/opensearch.xml.erb +0 -11
- data/doc/Atom-Responses.md +0 -90
- data/doc/CUSTOMIZING.md +0 -121
- data/doc/Extending-blacklight-with-the-document-extension-framework.md +0 -1
- data/doc/Extending-or-Modifying-Blacklight-Search-Behavior.md +0 -131
- data/doc/Features.md +0 -147
- data/doc/Integration-with-Rails-Footnotes.md +0 -20
- data/doc/Pagination.md +0 -38
- data/doc/Quickstart.md +0 -97
- data/doc/Upgrading-Guide.md +0 -98
- data/doc/User-Authentication.md +0 -54
- data/doc/Using-a-custom-solr-uniquekey-field.md +0 -36
- data/lib/blacklight/comma_link_renderer.rb +0 -28
- data/lib/railties/jetty_solr_server.rb +0 -108
- data/test_support/spec/views/catalog/show.html.erb_spec.rb +0 -101
@@ -0,0 +1,10 @@
|
|
1
|
+
xml.instruct! :xml, :version=>'1.0'
|
2
|
+
xml.OpenSearchDescription(:xmlns=>'http://a9.com/-/spec/opensearch/1.1/') {
|
3
|
+
xml.ShortName application_name
|
4
|
+
xml.Description "#{application_name} Search"
|
5
|
+
xml.Image "#{asset_url('favicon.ico')}", :height=>16, :width=>16, :type=>'image/x-icon'
|
6
|
+
xml.Contact
|
7
|
+
xml.Url :type=>'text/html', :method=>'get', :template=>"#{url_for :controller=>'catalog', :only_path => false}?q={searchTerms}"
|
8
|
+
xml.Url :type=>'application/rss+xml', :method=>'get', :template=>"#{url_for :controller=>'catalog', :only_path => false}.rss?q={searchTerms}"
|
9
|
+
xml.Url :type=>'application/x-suggestions+json', :method=>'get', :template=>"#{url_for :controller=>'catalog',:action => 'opensearch', :format=> 'json', :only_path => false}?q={searchTerms}"
|
10
|
+
}
|
@@ -15,7 +15,7 @@
|
|
15
15
|
|
16
16
|
<%# this should be in a partial -%>
|
17
17
|
<div id="document" class="<%= render_document_class %>">
|
18
|
-
<div id="doc_<%= @document
|
18
|
+
<div id="doc_<%= @document.id.to_s.parameterize %>">
|
19
19
|
|
20
20
|
<% # bookmark/folder functions -%>
|
21
21
|
<%= render_show_doc_actions @document %>
|
@@ -1,17 +1,17 @@
|
|
1
1
|
<ul class="folderTools">
|
2
2
|
<li class="cite">
|
3
|
-
<%= link_to "Cite", citation_catalog_path(:id => @documents.collect{|doc| doc.
|
3
|
+
<%= link_to "Cite", citation_catalog_path(:id => @documents.collect{|doc| doc.id}), {:id => 'citeLink', :name => 'citation'} %>
|
4
4
|
</li>
|
5
5
|
<li class="refworks">
|
6
6
|
<%= render :partial => 'catalog/refworks_form', :locals => {:documents=>@documents} %>
|
7
7
|
</li>
|
8
8
|
<li class="endnote">
|
9
|
-
<%= link_to "Export to EndNote", endnote_catalog_path(:id => @documents.collect {|doc| doc.
|
9
|
+
<%= link_to "Export to EndNote", endnote_catalog_path(:id => @documents.collect {|doc| doc.id}, :format => 'endnote')%>
|
10
10
|
</li>
|
11
11
|
<li class="email">
|
12
|
-
<%= link_to "Email", email_catalog_path(:id => @documents.collect {|doc| doc.
|
12
|
+
<%= link_to "Email", email_catalog_path(:id => @documents.collect {|doc| doc.id}), :class=>"lightboxLink", :id => "emailLink" %>
|
13
13
|
</li>
|
14
|
-
<% if current_user %>
|
14
|
+
<% if has_user_authentication_provider? and current_user %>
|
15
15
|
<li>
|
16
16
|
<%= render :partial=>'catalog/bookmark_form', :locals=>{:documents=>@documents} %>
|
17
17
|
</li>
|
@@ -1,49 +1,37 @@
|
|
1
|
-
|
2
1
|
<html xmlns="http://www.w3.org/1999/xhtml">
|
3
|
-
|
4
2
|
<head>
|
5
|
-
|
6
3
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
7
|
-
|
8
4
|
<title><%= h(@page_title || application_name) %></title>
|
9
|
-
<link href="<%= opensearch_catalog_path %>" title="<%= application_name%>" type="application/opensearchdescription+xml" rel="search"/>
|
10
|
-
|
5
|
+
<link href="<%= opensearch_catalog_path(:format => 'xml', :only_path => false) %>" title="<%= application_name%>" type="application/opensearchdescription+xml" rel="search"/>
|
6
|
+
<%= favicon_link_tag asset_path('favicon.ico') %>
|
7
|
+
<%= stylesheet_link_tag "application" %>
|
8
|
+
<%= javascript_include_tag "application" %>
|
9
|
+
<%= csrf_meta_tags %>
|
11
10
|
<%= raw(render_head_content) %>
|
12
|
-
|
13
|
-
|
14
11
|
</head>
|
15
|
-
<% if params[:q].to_s.empty? and params[:f].to_s.empty? and params[:id].nil? %>
|
16
|
-
<body onload="
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
<div class="yui-u first">
|
25
|
-
<h1 class="site_title"><%= link_to application_name, "/" %><%= (params[:controller] == "catalog" and !params[:id]) ? "<span id='results_text'>Search Results</span>".html_safe : "" %></h1>
|
26
|
-
</div>
|
27
|
-
<div class="yui-u user_util_links">
|
28
|
-
<%= render :partial=>'/user_util_links' %>
|
29
|
-
</div>
|
12
|
+
<% onload_text = "$('input#q').focus();" if params[:q].to_s.empty? and params[:f].to_s.empty? and params[:id].nil? %>
|
13
|
+
<body onload="<%= onload_text %>" class="<%= render_body_class.html_safe %>">
|
14
|
+
<div id="page">
|
15
|
+
<div id="hd">
|
16
|
+
<div id="logo">
|
17
|
+
<h1 class="site_title"><%= link_to application_name, "/" %><%= (params[:controller] == "catalog" and !params[:id]) ? "<span id='results_text'>Search Results</span>".html_safe : "" %></h1>
|
18
|
+
</div>
|
19
|
+
<div id="user_util_links">
|
20
|
+
<%= render :partial=>'/user_util_links' %>
|
30
21
|
</div>
|
31
22
|
</div>
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
<div id="yui-main">
|
36
|
-
<div class="yui-b">
|
23
|
+
<div id="bd">
|
24
|
+
<div id="main">
|
25
|
+
<div id="main_container">
|
37
26
|
<%= render :partial=>'/flash_msg' %>
|
38
27
|
<%= yield %>
|
39
28
|
</div>
|
40
29
|
</div>
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
</html>
|
30
|
+
<div id="sidebar"><%= sidebar_items.join('').html_safe %></div>
|
31
|
+
</div>
|
32
|
+
<div id="ft">
|
33
|
+
<%= raw(@footer) %>
|
34
|
+
</div>
|
35
|
+
</div>
|
36
|
+
</body>
|
37
|
+
</html>
|
@@ -1,5 +1,5 @@
|
|
1
1
|
<% @documents.each do |document| %>
|
2
2
|
<%= document.to_email_text %>
|
3
|
-
URL: <%= catalog_path(document
|
3
|
+
URL: <%= catalog_path(document, {:only_path => false}.merge(@url_gen_params)) %>
|
4
4
|
<% end %>
|
5
5
|
Message: <%= @message %>
|
@@ -10,7 +10,7 @@
|
|
10
10
|
<%- @searches.each_with_index do |search,index| -%>
|
11
11
|
<%= content_tag :tr, :id => "document_#{index + 1}" do %>
|
12
12
|
<td class="query"><%= link_to_previous_search(search.query_params) %></td>
|
13
|
-
<td class="actions"><%- if current_user && search.saved? -%>
|
13
|
+
<td class="actions"><%- if has_user_authentication_provider? && current_user && search.saved? -%>
|
14
14
|
<%= button_to "forget", forget_search_path(search.id) %>
|
15
15
|
<%- else -%>
|
16
16
|
<%= button_to "save", save_search_path(search.id), :method => :put %>
|
data/blacklight.gemspec
CHANGED
@@ -8,7 +8,7 @@ Gem::Specification.new do |s|
|
|
8
8
|
s.authors = ["Jonathan Rochkind", "Matt Mitchell", "Chris Beer", "Jessie Keck", "Jason Ronallo", "Vernon Chapman", "Mark A. Matienzo", "Dan Funk"]
|
9
9
|
s.email = ["blacklight-development@googlegroups.com"]
|
10
10
|
s.homepage = "http://projectblacklight.org/"
|
11
|
-
s.summary = "A next-
|
11
|
+
s.summary = "A next-generation Library Catalag for Universities"
|
12
12
|
s.description = %q{Blacklight is a free and open source ruby-on-rails based discovery interface (a.k.a. “next-generation catalog”) especially optimized for heterogeneous collections. You can use it as a library catalog, as a front end for a digital repository, or as a single-search interface to aggregate digital content that would otherwise be siloed.}
|
13
13
|
|
14
14
|
s.rubyforge_project = "blacklight"
|
@@ -20,12 +20,14 @@ Gem::Specification.new do |s|
|
|
20
20
|
|
21
21
|
# PRODUCTION GEM REQUIREMENTS
|
22
22
|
# ---------------------------------------
|
23
|
-
s.add_dependency "rails",
|
24
|
-
s.add_dependency "nokogiri",
|
25
|
-
s.add_dependency "unicode"
|
26
|
-
s.add_dependency "marc",
|
27
|
-
s.add_dependency "rsolr",
|
28
|
-
s.add_dependency "rsolr-ext", '1.0.3'
|
29
|
-
s.add_dependency "kaminari"
|
30
|
-
|
23
|
+
s.add_dependency "rails", "~> 3.1.1"
|
24
|
+
s.add_dependency "nokogiri", "~>1.5" # XML Parser
|
25
|
+
s.add_dependency "unicode" # provides C-form normalization of unicode characters, as required by refworks.
|
26
|
+
s.add_dependency "marc", "~> 0.4.3" # Marc record parser
|
27
|
+
s.add_dependency "rsolr", "~> 1.0.6" # Library for interacting with rSolr.
|
28
|
+
s.add_dependency "rsolr-ext", '~> 1.0.3' # extension to the above for some rails-ish behaviors - currently embedded in our solr document ojbect.
|
29
|
+
s.add_dependency "kaminari" # the pagination (page 1,2,3, etc..) of our search results
|
30
|
+
s.add_dependency "sass-rails", "~> 3.1.1"
|
31
|
+
s.add_development_dependency "jettywrapper", ">= 1.2.0"
|
32
|
+
s.add_dependency "compass", ">= 0.12.alpha.2"
|
31
33
|
end
|
Binary file
|
data/lib/blacklight.rb
CHANGED
@@ -8,6 +8,8 @@ require 'rsolr-ext'
|
|
8
8
|
module Blacklight
|
9
9
|
|
10
10
|
autoload :Configurable, 'blacklight/configurable'
|
11
|
+
autoload :Configuration, 'blacklight/configuration'
|
12
|
+
autoload :GlobalConfigurable, 'blacklight/global_configurable'
|
11
13
|
autoload :SearchFields, 'blacklight/search_fields'
|
12
14
|
|
13
15
|
autoload :Solr, 'blacklight/solr'
|
@@ -19,14 +21,14 @@ module Blacklight
|
|
19
21
|
|
20
22
|
autoload :User, 'blacklight/user'
|
21
23
|
|
22
|
-
autoload :CommaLinkRenderer, 'blacklight/comma_link_renderer'
|
23
|
-
|
24
24
|
autoload :Controller, 'blacklight/controller'
|
25
25
|
autoload :Catalog, 'blacklight/catalog'
|
26
26
|
|
27
27
|
autoload :Routes, 'blacklight/routes'
|
28
28
|
|
29
|
-
|
29
|
+
autoload :OpenStructWithHashAccess, 'blacklight/utils'
|
30
|
+
|
31
|
+
extend GlobalConfigurable
|
30
32
|
extend SearchFields
|
31
33
|
|
32
34
|
require 'blacklight/version'
|
data/lib/blacklight/catalog.rb
CHANGED
@@ -1,6 +1,8 @@
|
|
1
1
|
# -*- encoding : utf-8 -*-
|
2
|
-
module Blacklight::Catalog
|
2
|
+
module Blacklight::Catalog
|
3
3
|
extend ActiveSupport::Concern
|
4
|
+
|
5
|
+
include Blacklight::Configurable
|
4
6
|
include Blacklight::SolrHelper
|
5
7
|
|
6
8
|
SearchHistoryWindow = 12 # how many searches to save in session history
|
@@ -26,14 +28,11 @@ module Blacklight::Catalog
|
|
26
28
|
# get search results from the solr index
|
27
29
|
def index
|
28
30
|
|
29
|
-
delete_or_assign_search_session_params
|
30
|
-
|
31
31
|
extra_head_content << view_context.auto_discovery_link_tag(:rss, url_for(params.merge(:format => 'rss')), :title => "RSS for results")
|
32
32
|
extra_head_content << view_context.auto_discovery_link_tag(:atom, url_for(params.merge(:format => 'atom')), :title => "Atom for results")
|
33
33
|
|
34
34
|
(@response, @document_list) = get_search_results
|
35
35
|
@filters = params[:f] || []
|
36
|
-
search_session[:total] = @response.total unless @response.nil?
|
37
36
|
|
38
37
|
respond_to do |format|
|
39
38
|
format.html { save_current_search_params }
|
@@ -1,47 +1,62 @@
|
|
1
1
|
# -*- encoding : utf-8 -*-
|
2
2
|
module Blacklight::Configurable
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
# class MyThing
|
8
|
-
# extend Blacklight::Configurable
|
9
|
-
# end
|
10
|
-
#
|
11
|
-
# Now MyThing.config will be the result of:
|
12
|
-
# MyThing.configure(:production) {|config|}
|
13
|
-
#
|
14
|
-
# You set shared attributes by leaving the first argument blank or passing the :shared value:
|
15
|
-
# MyThing.configure {|config|}
|
16
|
-
# or
|
17
|
-
# MyThing.cofigure(:shared) {|config|}
|
18
|
-
|
19
|
-
# sets the @configs variable to a new Hash with empty Hash for :shared key and @config to nil
|
20
|
-
def reset_configs!
|
21
|
-
@config = nil
|
22
|
-
@configs = {:shared=>{}}
|
3
|
+
extend ActiveSupport::Concern
|
4
|
+
|
5
|
+
included do
|
6
|
+
helper_method :blacklight_config if respond_to? :helper_method
|
23
7
|
end
|
24
8
|
|
25
|
-
#
|
26
|
-
#
|
27
|
-
def
|
28
|
-
@
|
9
|
+
#instance methods for blacklight_config, default to class
|
10
|
+
# version unless set specifically on instance
|
11
|
+
def blacklight_config
|
12
|
+
@blacklight_config || self.class.blacklight_config
|
29
13
|
end
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
14
|
+
attr_writer :blacklight_config
|
15
|
+
|
16
|
+
module ClassMethods
|
17
|
+
def copy_blacklight_config_from(other_class)
|
18
|
+
self.blacklight_config = other_class.blacklight_config.inheritable_copy
|
19
|
+
end
|
20
|
+
|
21
|
+
# lazy load a deep_copy of superclass if present, else
|
22
|
+
# a default_configuration, which will be legacy load or new empty config.
|
23
|
+
# note the @blacklight_config variable is a ruby 'instance method on class
|
24
|
+
# object' that won't be automatically available to subclasses, that's why
|
25
|
+
# we lazy load to 'inherit' how we want.
|
26
|
+
def blacklight_config
|
27
|
+
unless (defined? @blacklight_config)
|
28
|
+
if superclass.respond_to?(:blacklight_config)
|
29
|
+
@blacklight_config = superclass.blacklight_config.deep_copy
|
30
|
+
else
|
31
|
+
@blacklight_config = default_configuration
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
return @blacklight_config
|
36
|
+
end
|
37
|
+
attr_writer :blacklight_config
|
38
|
+
|
39
|
+
#simply a convenience method for blacklight_config.configure
|
40
|
+
def configure_blacklight(*args, &block)
|
41
|
+
blacklight_config.configure(*args, &block)
|
42
|
+
end
|
43
|
+
|
44
|
+
##
|
45
|
+
# The default configuration object, by default it reads from Blacklight.config for backwards
|
46
|
+
# compatibility with Blacklight <= 3.1
|
47
|
+
def default_configuration
|
48
|
+
Blacklight::Configurable.default_configuration
|
49
|
+
end
|
35
50
|
end
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
51
|
+
|
52
|
+
def self.default_configuration
|
53
|
+
@default_configuration ||= Blacklight::Configuration.from_legacy_configuration(Blacklight.config) if Blacklight.respond_to?(:config) and not Blacklight.config.empty?
|
54
|
+
@default_configuration ||= Blacklight::Configuration.new
|
55
|
+
|
56
|
+
@default_configuration
|
57
|
+
end
|
58
|
+
|
59
|
+
def self.default_configuration= config
|
60
|
+
@default_configuration = config
|
45
61
|
end
|
46
|
-
|
47
62
|
end
|
@@ -0,0 +1,126 @@
|
|
1
|
+
module Blacklight
|
2
|
+
##
|
3
|
+
# Blacklight::Configuration holds the configuration for a Blacklight::Controller, including
|
4
|
+
# fields to display, facets to show, sort options, and search fields.
|
5
|
+
class Configuration < OpenStructWithHashAccess
|
6
|
+
|
7
|
+
# Set up Blacklight::Configuration.default_values to contain
|
8
|
+
# the basic, required Blacklight fields
|
9
|
+
class << self; attr_accessor :default_values; end
|
10
|
+
@default_values = {
|
11
|
+
:default_solr_params => {},
|
12
|
+
:show => OpenStructWithHashAccess.new,
|
13
|
+
:index => OpenStructWithHashAccess.new,
|
14
|
+
:spell_max => 5,
|
15
|
+
:max_per_page => 100
|
16
|
+
}
|
17
|
+
|
18
|
+
|
19
|
+
# XXX this isn't very pretty, but it works.
|
20
|
+
require 'blacklight/configuration/fields'
|
21
|
+
require 'blacklight/configuration/solr_field'
|
22
|
+
require 'blacklight/configuration/search_field'
|
23
|
+
require 'blacklight/configuration/sort_field'
|
24
|
+
include Fields
|
25
|
+
|
26
|
+
# Create collections of solr fields
|
27
|
+
define_field_access :facet_field
|
28
|
+
define_field_access :index_field
|
29
|
+
define_field_access :show_field
|
30
|
+
define_field_access :search_field
|
31
|
+
define_field_access :sort_field
|
32
|
+
|
33
|
+
def initialize(*args)
|
34
|
+
super(*args)
|
35
|
+
initialize_default_values!
|
36
|
+
yield(self) if block_given?
|
37
|
+
self
|
38
|
+
end
|
39
|
+
|
40
|
+
##
|
41
|
+
# Initialize default values from the class attribute
|
42
|
+
def initialize_default_values!
|
43
|
+
Marshal.load(Marshal.dump(self.class.default_values)).each do |k, v|
|
44
|
+
self[k] ||= v
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
# Returns default search field, used for simpler display in history, etc.
|
49
|
+
# if not set, defaults to first defined search field
|
50
|
+
def default_search_field
|
51
|
+
field = nil
|
52
|
+
field ||= search_fields.values.select { |field| field.default == true }.first
|
53
|
+
field ||= search_fields.values.first
|
54
|
+
|
55
|
+
field
|
56
|
+
end
|
57
|
+
|
58
|
+
# Returns default sort field, used for simpler display in history, etc.
|
59
|
+
# if not set, defaults to first defined sort field
|
60
|
+
def default_sort_field
|
61
|
+
field = nil
|
62
|
+
field ||= sort_fields.values.select { |field| field.default == true }.first
|
63
|
+
field ||= sort_fields.values.first
|
64
|
+
|
65
|
+
field
|
66
|
+
end
|
67
|
+
|
68
|
+
##
|
69
|
+
# Provide a 'deep copy' of Blacklight::Configuration that can be modifyed without affecting
|
70
|
+
# the original Blacklight::Configuration instance.
|
71
|
+
#
|
72
|
+
def deep_copy
|
73
|
+
Marshal.load(Marshal.dump(self))
|
74
|
+
end
|
75
|
+
alias_method :inheritable_copy, :deep_copy
|
76
|
+
|
77
|
+
##
|
78
|
+
# DSL helper
|
79
|
+
def configure
|
80
|
+
yield self if block_given?
|
81
|
+
self
|
82
|
+
end
|
83
|
+
|
84
|
+
##
|
85
|
+
# Helper method for loading a legacy blacklight configuration into the new style Blacklight::Configuration
|
86
|
+
def self.from_legacy_configuration config
|
87
|
+
config = Marshal.load(Marshal.dump(config))
|
88
|
+
|
89
|
+
Blacklight::Configuration.new do |blacklight_config|
|
90
|
+
# SolrHelper#default_solr_parameters needs to iterate over the keys, so this can't be a Struct
|
91
|
+
blacklight_config.default_solr_params = config[:default_solr_params]
|
92
|
+
|
93
|
+
config[:facet][:field_names].each do |x|
|
94
|
+
blacklight_config.add_facet_field x, :limit => config[:facet][:limits][x], :label => config[:facet][:labels][x]
|
95
|
+
end if config[:facet] and config[:facet][:field_names]
|
96
|
+
|
97
|
+
config[:index_fields][:field_names].each do |x|
|
98
|
+
blacklight_config.add_index_field x, :label => config[:index_fields][:labels][x]
|
99
|
+
end if config[:index_fields]
|
100
|
+
|
101
|
+
config[:show_fields][:field_names].each do |x|
|
102
|
+
blacklight_config.add_show_field x, :label => config[:show_fields][:labels][x]
|
103
|
+
end if config[:show_fields]
|
104
|
+
|
105
|
+
config[:search_fields].each do |x|
|
106
|
+
unless x.is_a? Hash
|
107
|
+
x = { :label => x[0], :key => x[1], :qt => x[1]}
|
108
|
+
end
|
109
|
+
|
110
|
+
x[:label] ||= x.delete(:display_label)
|
111
|
+
|
112
|
+
blacklight_config.add_search_field x[:key], x
|
113
|
+
end if config[:search_fields]
|
114
|
+
|
115
|
+
config[:sort_fields].each do |field|
|
116
|
+
label, sort = field
|
117
|
+
blacklight_config.add_sort_field sort, :label => label
|
118
|
+
end if config[:sort_fields]
|
119
|
+
|
120
|
+
config.reject { |key, value| [:default_solr_params, :facet, :index_fields, :show_fields, :search_fields, :sort_fields].include? key }.each do |key,value|
|
121
|
+
blacklight_config.send("#{key}=", (Blacklight::OpenStructWithHashAccess.new(value) if value.is_a? Hash) || value)
|
122
|
+
end
|
123
|
+
end
|
124
|
+
end
|
125
|
+
end
|
126
|
+
end
|