umlaut 4.0.3 → 4.1.0.pre.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +8 -8
- data/README.md +6 -0
- data/app/assets/javascripts/umlaut/update_html.js +81 -23
- data/app/assets/stylesheets/umlaut/_misc.scss +1 -2
- data/app/assets/stylesheets/umlaut/_resolve.scss +44 -10
- data/app/controllers/export_email_controller.rb +2 -2
- data/app/controllers/feedback_controller.rb +1 -1
- data/app/controllers/umlaut/controller_behavior.rb +14 -0
- data/app/controllers/umlaut_configurable.rb +52 -21
- data/app/helpers/open_search_helper.rb +1 -1
- data/app/helpers/resolve_helper.rb +36 -35
- data/app/helpers/umlaut/section_highlights.rb +85 -0
- data/app/mixin_logic/metadata_helper.rb +11 -5
- data/app/models/collection.rb +129 -96
- data/app/models/dispatched_service.rb +4 -0
- data/app/models/referent.rb +7 -1
- data/app/models/request.rb +21 -0
- data/app/models/service_store.rb +16 -3
- data/app/presentation/section_renderer.rb +16 -17
- data/app/service_adaptors/blacklight.rb +11 -4
- data/app/service_adaptors/internet_archive.rb +58 -25
- data/app/service_adaptors/isi.rb +14 -4
- data/app/service_adaptors/jcr.rb +13 -4
- data/app/views/resolve/_fulltext.html.erb +1 -1
- data/app/views/resolve/_section_display.html.erb +1 -1
- data/app/views/resolve/_service_errors.html.erb +3 -3
- data/app/views/search/books.html.erb +1 -1
- data/app/views/search/journal_search.html.erb +2 -1
- data/app/views/search/journals.html.erb +2 -1
- data/db/orig_fixed_data/service_type_values.yml +15 -37
- data/lib/aws_product_sign.rb +1 -1
- data/lib/generators/templates/umlaut_services.yml +5 -2
- data/lib/generators/umlaut/install_generator.rb +1 -0
- data/{app/models → lib}/service_type_value.rb +36 -22
- data/lib/umlaut/routes.rb +34 -5
- data/lib/umlaut/test_help.rb +159 -0
- data/lib/umlaut/version.rb +2 -2
- data/lib/umlaut.rb +44 -9
- metadata +10 -8
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
NThjZGZmNjFlZTgwNGVjMjg0MjJkODAwNWI4NjRiYzRjNmNlNGY5OQ==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
OGQ0MGRlYzJiNmViZTQxMDQ4Y2U4MWYzOWY3MjljOWQwMWVjYmRlZQ==
|
7
7
|
SHA512:
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
ZGI4Njk3ZmExYzljNDcwMTMzZjA5YWQ3NTYyOGY1YWYyYTZmZjNlNTAxNDAz
|
10
|
+
MWYyNmZkYmJiNGEwYWViNTQ4ZDA4OWY2OGQ2MTA4ZGZiYjZkYzU5ZDEzZWQx
|
11
|
+
YWY3OTYwOGJiZmU4MzU5ZTJhODgzMThjOTRjNmNlMmZhOGI0NjA=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
NTlkNWFhNDgxMjk1MWFkYWJiZGE1ZjQ5OGE2YWJkNzc2YmIwODhiODNjMTRk
|
14
|
+
NmU5ODU2YTIwMWFmMDQwNGQxNTRhOGNmODFmNzVkMmU5MzcxMDM0OGYxODgx
|
15
|
+
ZTQ0ZGI1MjE0ZmQ3ZmIzMzFmNWMyMDNhZjgyMzhhOWNmY2I2ODI=
|
data/README.md
CHANGED
@@ -81,6 +81,12 @@ Tests use the vcr gem where appropriate. See `./test/support/test_with_cassette`
|
|
81
81
|
gem skeleton was created with `rails plugin new`, which creates a dummy app
|
82
82
|
that tests are run in context of, at `./test/dummy`.
|
83
83
|
|
84
|
+
The vcr gem is used to record HTTP transactions for tests.
|
85
|
+
|
86
|
+
There are some helpful methods for setting up and asserting in tests in
|
87
|
+
Umlaut::TestHelp, which are used in Umlaut itself and can also be used
|
88
|
+
in local apps or Umlaut plugins.
|
89
|
+
|
84
90
|
See also: https://github.com/team-umlaut/umlaut/wiki/Developing
|
85
91
|
|
86
92
|
## Source
|
@@ -1,4 +1,12 @@
|
|
1
|
-
/* update_html.js:
|
1
|
+
/* update_html.js:
|
2
|
+
* Provide functions to update content on page with background responses from Umlaut.
|
3
|
+
* Used by Umlaut itself, as well as by third party callers.
|
4
|
+
*
|
5
|
+
* This is compiled into a standalone top-level JS file, for src'ing by third
|
6
|
+
* party callers.
|
7
|
+
*
|
8
|
+
* More information on use at https://github.com/team-umlaut/umlaut/wiki/JQuery-Content-Utility
|
9
|
+
*/
|
2
10
|
(function($) {
|
3
11
|
|
4
12
|
function SectionTarget(config) {
|
@@ -6,11 +14,14 @@
|
|
6
14
|
$.extend(this, config);
|
7
15
|
|
8
16
|
//Defaults
|
9
|
-
if (this.selector == undefined)
|
17
|
+
if (typeof(this.selector) == 'undefined')
|
10
18
|
this.selector = "#" + this.umlaut_section_id;
|
11
|
-
if (this.position == undefined)
|
19
|
+
if (typeof(this.position) == 'undefined')
|
12
20
|
this.position = "html";
|
13
|
-
|
21
|
+
// Container must be a JQuery object, if it's not
|
22
|
+
// passed in, use $(document)
|
23
|
+
if (typeof(this.container) == 'undefined')
|
24
|
+
this.container = $(document); // default container is document
|
14
25
|
}
|
15
26
|
//Callback default to no-op function please.
|
16
27
|
var noop = function() {};
|
@@ -19,53 +30,100 @@
|
|
19
30
|
SectionTarget.prototype.complete = noop;
|
20
31
|
|
21
32
|
SectionTarget.prototype.ensure_placement_destination = function() {
|
22
|
-
if ( this.selector == undefined) {
|
33
|
+
if ( typeof(this.selector) == 'undefined') {
|
23
34
|
return null;
|
24
35
|
}
|
25
36
|
|
26
37
|
//Already have it cached?
|
27
38
|
if ( this.host_div_element ) {
|
28
39
|
return this.host_div_element;
|
29
|
-
}
|
40
|
+
}
|
30
41
|
|
31
|
-
|
42
|
+
// Create an empty div to hold our content
|
43
|
+
var new_div = $('<div class="umlaut" style="display:none"></div>');
|
44
|
+
|
32
45
|
// Find the first thing matched by selector, and call the
|
33
|
-
// method specified in "
|
46
|
+
// method specified in "position" string on it, giving it our
|
34
47
|
// HTML to replace. This works because our actions are
|
35
48
|
// all arguments that will take one method: html, before, after, append,
|
36
49
|
// prepend.
|
37
|
-
|
50
|
+
this.container.find(this.selector).eq(0)[ this.position ]( new_div );
|
38
51
|
|
39
52
|
//Cache for later
|
40
53
|
this.host_div_element = new_div;
|
41
54
|
return this.host_div_element;
|
42
55
|
};
|
43
|
-
|
44
56
|
|
45
57
|
// Define an object constructor on the global window object
|
46
58
|
// For our UmlautHtmlUpdater object.
|
47
59
|
//
|
48
|
-
//
|
60
|
+
// You need to pass the Umlaut Base URL, as well as an OpenURL kev context
|
61
|
+
// object. There are additional optional parameters.
|
62
|
+
//
|
63
|
+
// There are two argument formats you can call `new HTMLUpdater` with.
|
64
|
+
// Positional allows you to pass umlaut base and OpenURL:
|
65
|
+
// var updater = new Umlaut.HtmlUpdater("http://umlaut.example.edu", "au=Smith&ti=Book")
|
66
|
+
//
|
67
|
+
// Or named argument style allows you to pass additional parameters,
|
68
|
+
// including locale and container.
|
69
|
+
//
|
70
|
+
// var updater = new Umlaut.HtmlUpdater({
|
71
|
+
// umlaut_base: "http://umlaut.example.edu",
|
72
|
+
// context_object: "au=Smith&ti=Book",
|
73
|
+
// locale: "de",
|
74
|
+
// container: "#selector"
|
75
|
+
// });
|
76
|
+
//
|
77
|
+
//
|
78
|
+
//
|
79
|
+
// The optional 'locale' arg is a locale string eg 'en', 'de'
|
80
|
+
//
|
81
|
+
// The optional 'container' argument is a selector, DOM element, OR
|
82
|
+
// jQuery object. The container limits the updater's content
|
83
|
+
// replacements (controlled by selectors on individual sections) to within
|
84
|
+
// the container given.
|
49
85
|
//
|
50
86
|
// Note this object is used by external sites as part of the JQuery updater
|
51
87
|
// javascript API. This is API, which has to be callable by non-Umlaut sites.
|
52
88
|
// Try not to change the method signature in incompatible ways.
|
53
|
-
function HtmlUpdater(
|
54
|
-
if (
|
55
|
-
|
89
|
+
function HtmlUpdater(first_arg, second_arg, third_arg) {
|
90
|
+
if (typeof(first_arg) == "object") {
|
91
|
+
// Simply merge arguments object as properties on ourselves.
|
92
|
+
$.extend(this, first_arg);
|
93
|
+
} else {
|
94
|
+
// positional args
|
95
|
+
this.umlaut_base = first_arg;
|
96
|
+
this.context_object = second_arg;
|
97
|
+
this.locale = third_arg;
|
98
|
+
}
|
99
|
+
|
100
|
+
// Argument checking
|
101
|
+
if (typeof(this.umlaut_base) == "undefined") {
|
102
|
+
throw new Error("new Umlaut.HtmlUpdater: missing umlaut_base (String) argument");
|
103
|
+
}
|
104
|
+
if (typeof(this.context_object) == "undefined") {
|
105
|
+
throw new Error("new Umlaut.HtmlUpdater: missing context_object (String) argument");
|
106
|
+
}
|
107
|
+
|
108
|
+
|
56
109
|
|
57
110
|
// Remove query string (if present)
|
58
|
-
umlaut_base = umlaut_base.replace(/\?.*$/, '')
|
111
|
+
this.umlaut_base = this.umlaut_base.replace(/\?.*$/, '')
|
59
112
|
// Remove trailing slash
|
60
|
-
umlaut_base = umlaut_base.replace(/\/$/,'');
|
61
|
-
this.umlaut_uri = umlaut_base + '/resolve/partial_html_sections?umlaut.response_format=json&' + context_object;
|
62
|
-
if (locale)
|
63
|
-
this.umlaut_uri += "¨aut.locale=" + locale;
|
113
|
+
this.umlaut_base = this.umlaut_base.replace(/\/$/,'');
|
114
|
+
this.umlaut_uri = this.umlaut_base + '/resolve/partial_html_sections?umlaut.response_format=json&' + this.context_object;
|
115
|
+
if (this.locale)
|
116
|
+
this.umlaut_uri += "¨aut.locale=" + this.locale;
|
64
117
|
|
65
118
|
this.section_targets = [];
|
66
119
|
|
67
120
|
this.add_section_target = function(config) {
|
68
|
-
|
121
|
+
var target = new SectionTarget(config);
|
122
|
+
if (typeof(this.container) !== "undefined") {
|
123
|
+
// Turn it into a JQuery object if it wasn't already.
|
124
|
+
target.container = $(this.container);
|
125
|
+
}
|
126
|
+
this.section_targets.push( target );
|
69
127
|
};
|
70
128
|
|
71
129
|
//default no-op call-backs
|
@@ -99,11 +157,11 @@
|
|
99
157
|
|
100
158
|
var umlaut_html_section = myself.find_umlaut_response_section(umlaut_response, section_target.umlaut_section_id);
|
101
159
|
|
102
|
-
if (umlaut_html_section == undefined) {
|
160
|
+
if (typeof(umlaut_html_section) == 'undefined') {
|
103
161
|
continue;
|
104
162
|
}
|
105
163
|
var count = null;
|
106
|
-
if (typeof
|
164
|
+
if (typeof(umlaut_html_section.response_count) != "undefined") {
|
107
165
|
count = parseInt(umlaut_html_section.response_count.value);
|
108
166
|
}
|
109
167
|
var existing_element = section_target.ensure_placement_destination();
|
@@ -162,7 +220,7 @@
|
|
162
220
|
};
|
163
221
|
|
164
222
|
//Put it in a global object, leave space for other things in "Umlaut" later.
|
165
|
-
if (window.Umlaut == undefined)
|
223
|
+
if (typeof(window.Umlaut) == 'undefined')
|
166
224
|
window.Umlaut = new Object();
|
167
225
|
window.Umlaut.HtmlUpdater = HtmlUpdater;
|
168
226
|
|
@@ -19,6 +19,10 @@
|
|
19
19
|
padding-left: $umlautIndent;
|
20
20
|
text-indent: -$umlautIndent;
|
21
21
|
}
|
22
|
+
// default bold response link if it's in the main section
|
23
|
+
.umlaut-main & .response_link {
|
24
|
+
font-weight: bold;
|
25
|
+
}
|
22
26
|
}
|
23
27
|
|
24
28
|
.umlaut-section {
|
@@ -34,24 +38,30 @@
|
|
34
38
|
@extend .text-muted;
|
35
39
|
}
|
36
40
|
|
37
|
-
|
41
|
+
/* In the sidebar, search_inside heading looks better without
|
42
|
+
bottom margin, cause of spacing needed for form, it just does. */
|
43
|
+
.umlaut-sidebar &.search_inside {
|
44
|
+
.section_heading h3 {
|
45
|
+
margin-bottom: 0;
|
46
|
+
}
|
47
|
+
}
|
38
48
|
|
39
49
|
// Special looks for particular sections
|
40
|
-
&.fulltext {
|
50
|
+
&.fulltext, .page-icons {
|
41
51
|
@include iconed-response;
|
42
52
|
.response_item i {
|
43
53
|
@extend .umlaut_icons-famfamfam-page-text;
|
44
54
|
}
|
45
55
|
}
|
46
56
|
|
47
|
-
&.audio {
|
57
|
+
&.audio, .sound-icons {
|
48
58
|
@include iconed-response;
|
49
59
|
.response_item i {
|
50
60
|
@extend .umlaut_icons-famfamfam-page-sound;
|
51
61
|
}
|
52
62
|
}
|
53
63
|
|
54
|
-
&.excerpts {
|
64
|
+
&.excerpts, .book-open-icons {
|
55
65
|
@include iconed-response;
|
56
66
|
.response_item i {
|
57
67
|
@extend .umlaut_icons-famfamfam-book-open;
|
@@ -62,13 +72,15 @@
|
|
62
72
|
border: none;
|
63
73
|
}
|
64
74
|
|
65
|
-
&.document_delivery {
|
75
|
+
&.document_delivery, .book-go-icons {
|
66
76
|
@include iconed-response;
|
67
77
|
.response_item i {
|
68
78
|
@extend .umlaut_icons-famfamfam-book-go;
|
69
79
|
}
|
70
80
|
}
|
71
81
|
|
82
|
+
.response_item
|
83
|
+
|
72
84
|
&.related_items {
|
73
85
|
// Margin between the 'cited by' and 'similar' lists
|
74
86
|
.response_list + .response_list {
|
@@ -77,7 +89,7 @@
|
|
77
89
|
|
78
90
|
}
|
79
91
|
|
80
|
-
&.holding {
|
92
|
+
&.holding, &.book-icons {
|
81
93
|
.response_item i {
|
82
94
|
@extend .umlaut_icons-famfamfam-book;
|
83
95
|
}
|
@@ -132,8 +144,34 @@
|
|
132
144
|
.umlaut-section-highlighted {
|
133
145
|
@include umlaut-well($umlautHighlightedSectionBackgroundColor, $umlautHighlightedSectionBorderColor);
|
134
146
|
border-radius: $umlautBorderRadiusExtraLarge;
|
147
|
+
|
148
|
+
// If a p.alert is in a highlighted section, give it special styling
|
149
|
+
// as a ribbon, not a box-in-box.
|
150
|
+
.alert {
|
151
|
+
margin-left: -12px;
|
152
|
+
margin-right: -12px;
|
153
|
+
|
154
|
+
border-radius: 0;
|
155
|
+
border-left: 0;
|
156
|
+
border-right: 0;
|
157
|
+
}
|
158
|
+
// If it's the LAST thing in the highlighted section, do better and merge
|
159
|
+
// it with the box itself
|
160
|
+
.umlaut_section_content > .alert:last-child {
|
161
|
+
margin-bottom: -12px;
|
162
|
+
border-bottom-right-radius: $umlautBorderRadiusExtraLarge;
|
163
|
+
border-bottom-left-radius: $umlautBorderRadiusExtraLarge;
|
164
|
+
}
|
165
|
+
.umlaut_section_content > hr {
|
166
|
+
border-color: $umlautHighlightedSectionBorderColor;
|
167
|
+
margin-left: -12px;
|
168
|
+
margin-right: -12px;
|
169
|
+
}
|
170
|
+
|
135
171
|
}
|
136
172
|
|
173
|
+
|
174
|
+
|
137
175
|
.section_prompt {
|
138
176
|
@extend .text-muted;
|
139
177
|
}
|
@@ -291,10 +329,6 @@
|
|
291
329
|
font-size: $font-size-base;
|
292
330
|
}
|
293
331
|
|
294
|
-
// Resolve Errors
|
295
|
-
#service_errors_content {
|
296
|
-
@include umlaut-well($umlautResolveErrorBackgroundColor, $umlautResolveErrorBorderColor);
|
297
|
-
}
|
298
332
|
|
299
333
|
a:not(:hover) .coverage_summary {
|
300
334
|
/* even though it's part of a hyperlink, we make it black for distinction */
|
@@ -11,7 +11,7 @@ class ExportEmailController < UmlautController
|
|
11
11
|
@fulltexts = @user_request.get_service_type('fulltext', { :refresh=>true })
|
12
12
|
@holdings = @user_request.get_service_type('holding', { :refresh=>true })
|
13
13
|
if valid_email?
|
14
|
-
Emailer.citation(@email, @user_request, @fulltexts, @holdings)
|
14
|
+
action_mailer_deliver Emailer.citation(@email, @user_request, @fulltexts, @holdings)
|
15
15
|
else
|
16
16
|
flash[:alert] = email_validation_error
|
17
17
|
render :email and return
|
@@ -29,7 +29,7 @@ class ExportEmailController < UmlautController
|
|
29
29
|
@email = "#{@number}@#{@provider}" unless @number.nil? or @provider.nil?
|
30
30
|
@holding = params[:holding]
|
31
31
|
if valid_txt_number? && valid_txt_holding?
|
32
|
-
Emailer.short_citation(@email, @user_request, holding_location(@holding), call_number(@holding))
|
32
|
+
action_mailer_deliver Emailer.short_citation(@email, @user_request, holding_location(@holding), call_number(@holding))
|
33
33
|
else
|
34
34
|
flash[:alert] = txt_validation_error
|
35
35
|
render :txt and return
|
@@ -15,7 +15,7 @@ class FeedbackController < UmlautController
|
|
15
15
|
)
|
16
16
|
end
|
17
17
|
|
18
|
-
FeedbackMailer.feedback(request.host_with_port, to_address, options)
|
18
|
+
action_mailer_deliver FeedbackMailer.feedback(request.host_with_port, to_address, options)
|
19
19
|
|
20
20
|
flash[:alert_success] = "Thanks, your message has been sent."
|
21
21
|
|
@@ -87,6 +87,20 @@ module Umlaut::ControllerBehavior
|
|
87
87
|
end
|
88
88
|
protected :specified_service_groups
|
89
89
|
|
90
|
+
# Call an ActionMailer::Base without deprecation warnings in Rails 4.3,
|
91
|
+
# but still work in earlier rails without deliver_later
|
92
|
+
#
|
93
|
+
# Calls with deliver_later in Rails 4.3. If no ActiveJob queue
|
94
|
+
# is set up, no problem default is immediate executor anyway.
|
95
|
+
def action_mailer_deliver(mailer)
|
96
|
+
if mailer.respond_to?(:deliver_later)
|
97
|
+
mailer.deliver_later
|
98
|
+
else
|
99
|
+
mailer.deliver
|
100
|
+
end
|
101
|
+
end
|
102
|
+
protected :action_mailer_deliver
|
103
|
+
|
90
104
|
|
91
105
|
|
92
106
|
end
|
@@ -234,13 +234,12 @@ module UmlautConfigurable
|
|
234
234
|
# We add a custom method into the resolve_sections array,
|
235
235
|
# ensure_order!.
|
236
236
|
resolve_sections [].extend Module.new do
|
237
|
-
|
238
|
-
#
|
239
|
-
#
|
240
|
-
# resolve_sections.ensure_order!("holding", "document_delivery")
|
241
|
-
# Maybe in the future we'll expand this to take variable arguments.
|
237
|
+
|
238
|
+
# Deprecated. This was a silly confusing way to do this.
|
239
|
+
# See #remove and #insert below instead.
|
242
240
|
def self.ensure_order!(first, second)
|
243
|
-
|
241
|
+
$stderr.puts "resolve_sections.ensure_order! is deprecated, please see resolve_sections.remove and resolve_sections.insert"
|
242
|
+
|
244
243
|
list = self
|
245
244
|
|
246
245
|
index1 = list.index {|s| s[:div_id].to_s == first.to_s}
|
@@ -250,8 +249,40 @@ module UmlautConfigurable
|
|
250
249
|
|
251
250
|
list
|
252
251
|
end
|
252
|
+
|
253
|
+
# Insert a section_config hash before or after an existing
|
254
|
+
# section, by the existing section's div_id
|
255
|
+
#
|
256
|
+
# resolve_sections.insert_section({:div_id => "new"}, :after => "fulltext")
|
257
|
+
# resolve_sections.insert_section( resolve_sections.remove_section("document_deliver"), :before => "fulltext")
|
258
|
+
def self.insert_section(section_config, options = {})
|
259
|
+
list = self
|
260
|
+
|
261
|
+
if options[:before]
|
262
|
+
i = (list.find_index {|s| s[:div_id].to_s == options[:before].to_s}) || 0
|
263
|
+
list.insert(i, section_config)
|
264
|
+
elsif options[:after]
|
265
|
+
i = (list.find_index {|s| s[:div_id].to_s == options[:after].to_s}) || (list.length - 1)
|
266
|
+
list.insert(i + 1, section_config)
|
267
|
+
else
|
268
|
+
# just add at end of list
|
269
|
+
list << section_config
|
270
|
+
end
|
271
|
+
end
|
272
|
+
|
273
|
+
# Remove a configuration block with a certain div_id from the configuration entirely,
|
274
|
+
# returning the removed configuration block (or nil if none exists).
|
275
|
+
# You can re-insert it with #insert if you like.
|
276
|
+
def self.remove_section(div_id)
|
277
|
+
list = self
|
278
|
+
i = list.find_index {|s| s[:div_id].to_s == div_id.to_s}
|
279
|
+
return list.delete_at(i) if i
|
280
|
+
end
|
281
|
+
|
253
282
|
end
|
254
283
|
|
284
|
+
|
285
|
+
|
255
286
|
##########
|
256
287
|
#
|
257
288
|
# Names of these sections can be given in Rails i18n, under key
|
@@ -277,21 +308,7 @@ module UmlautConfigurable
|
|
277
308
|
html_area :main
|
278
309
|
partial :fulltext
|
279
310
|
show_partial_only true
|
280
|
-
end
|
281
|
-
|
282
|
-
add_resolve_sections! do
|
283
|
-
div_id "search_inside"
|
284
|
-
html_area :main
|
285
|
-
partial "search_inside"
|
286
|
-
show_partial_only true
|
287
|
-
end
|
288
|
-
|
289
|
-
add_resolve_sections! do
|
290
|
-
div_id "excerpts"
|
291
|
-
html_area :main
|
292
|
-
list_visible_limit 5
|
293
|
-
visibility :responses_exist
|
294
|
-
end
|
311
|
+
end
|
295
312
|
|
296
313
|
add_resolve_sections! do
|
297
314
|
div_id "audio"
|
@@ -351,6 +368,20 @@ module UmlautConfigurable
|
|
351
368
|
html_area :sidebar
|
352
369
|
visibility :in_progress
|
353
370
|
end
|
371
|
+
|
372
|
+
add_resolve_sections! do
|
373
|
+
div_id "search_inside"
|
374
|
+
html_area :sidebar
|
375
|
+
partial "search_inside"
|
376
|
+
show_partial_only true
|
377
|
+
end
|
378
|
+
|
379
|
+
add_resolve_sections! do
|
380
|
+
div_id "excerpts"
|
381
|
+
html_area :sidebar
|
382
|
+
list_visible_limit 5
|
383
|
+
visibility :responses_exist
|
384
|
+
end
|
354
385
|
|
355
386
|
add_resolve_sections! do
|
356
387
|
div_id "related_items"
|
@@ -1,6 +1,6 @@
|
|
1
1
|
module OpenSearchHelper
|
2
2
|
|
3
3
|
def opensearch_template_url
|
4
|
-
url_for(:controller => "search", :action => "journal_search", :rfr_id => umlaut_config.lookup('
|
4
|
+
url_for(:controller => "search", :action => "journal_search", :rfr_id => umlaut_config.lookup!('rfr_ids.opensearch'), :'umlaut.title_search_type' => 'contains', :only_path => false ) + '&rft.jtitle={searchTerms}'
|
5
5
|
end
|
6
6
|
end
|
@@ -39,45 +39,29 @@ module ResolveHelper
|
|
39
39
|
# * current Umlaut Request object
|
40
40
|
# * string section id
|
41
41
|
# * array of umlaut ServiceResponses already fetched for this section.
|
42
|
-
|
42
|
+
#
|
43
|
+
# third paramter used to exist but was not used, deprecated but left there
|
44
|
+
# for now for backwards compat. TODO.
|
45
|
+
def section_css_classes(umlaut_request, section_id, unused = nil)
|
43
46
|
classes = ["umlaut-section", section_id]
|
44
|
-
classes << 'umlaut-section-highlighted' if should_highlight_section?(
|
47
|
+
classes << 'umlaut-section-highlighted' if section_highlights(umlaut_request).should_highlight_section?(section_id)
|
45
48
|
return classes
|
46
49
|
end
|
47
50
|
|
48
|
-
#
|
49
|
-
#
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
# over-ride this method.
|
54
|
-
#
|
55
|
-
# This is VERY tricky to get right, BOTH becuase of local policy differences,
|
56
|
-
# AND becuase umlaut's concurrent service handling means things are changing
|
57
|
-
# all the time. Umlaut used to just highlight fulltext with responses, that's it.
|
58
|
-
# But we're trying something more sophisticated. You may want to over-ride with
|
59
|
-
# something simpler, or something better suited to local policies and conditions.
|
60
|
-
def should_highlight_section?(umlaut_request, section_id, response_list)
|
61
|
-
case section_id
|
62
|
-
when "fulltext"
|
63
|
-
umlaut_request.get_service_type("fulltext").present?
|
64
|
-
when "holding"
|
65
|
-
umlaut_request.get_service_type("holding").present? && umlaut_request.get_service_type("fulltext").empty?
|
66
|
-
when "document_delivery"
|
67
|
-
# Only once fulltext and holdings are done being fetched.
|
68
|
-
# If there's no fulltext or holdings, OR there's holdings, but
|
69
|
-
# it's a journal type thing, where we probably don't know if the
|
70
|
-
# particular volume/issue wanted is present.
|
71
|
-
umlaut_request.get_service_type("fulltext").empty? &&
|
72
|
-
(! umlaut_request.service_types_in_progress?(["fulltext", "holding"])) && (
|
73
|
-
umlaut_request.get_service_type("holding").empty? ||
|
74
|
-
umlaut_request.referent.format == "journal"
|
75
|
-
)
|
76
|
-
end
|
51
|
+
# Deprecated!
|
52
|
+
# Left for backwards compat. TODO.
|
53
|
+
def should_highlight_section?(umlaut_request, section_id)
|
54
|
+
$stderr.warn "should_highlight_section? is deprecated, use `section_highlighter(umlaut_request).should_highlight_section?(section_id)`"
|
55
|
+
highlighted_sections(umlaut_request).include? section_id.to_s
|
77
56
|
end
|
78
57
|
|
79
|
-
|
80
|
-
|
58
|
+
# Returns a section highlighter for the current umlaut request.
|
59
|
+
# (Cached for given @umlaut_request)
|
60
|
+
def section_highlights(umlaut_request = @umlaut_request)
|
61
|
+
# Need to cache for efficiency, need to cache by request id since we take
|
62
|
+
# it as an arg.
|
63
|
+
@_section_highlighters ||= {}
|
64
|
+
return @_section_highlighters[umlaut_request.id] ||= Umlaut::SectionHighlights.new(umlaut_request)
|
81
65
|
end
|
82
66
|
|
83
67
|
# size can be 'small', 'medium', or 'large.
|
@@ -95,7 +79,7 @@ module ResolveHelper
|
|
95
79
|
def user_entered_citation?(uml_request)
|
96
80
|
return false unless uml_request && uml_request.referrer_id
|
97
81
|
id = uml_request.referrer_id
|
98
|
-
return id == 'info:sid/sfxit.com:citation' || id == umlaut_config.lookup("rfr_ids.citation") || id == umlaut_config.lookup('rfr_ids.opensearch')
|
82
|
+
return id == 'info:sid/sfxit.com:citation' || id == umlaut_config.lookup!("rfr_ids.citation") || id == umlaut_config.lookup!('rfr_ids.opensearch')
|
99
83
|
end
|
100
84
|
|
101
85
|
def display_not_found_warning?(uml_request)
|
@@ -235,11 +219,28 @@ module ResolveHelper
|
|
235
219
|
# in application config resolve_sections list for a specific
|
236
220
|
# part of the page. :main, :sidebar, or :resource_info.
|
237
221
|
def html_sections(area)
|
238
|
-
|
222
|
+
config_resolve_sections.find_all do |section|
|
239
223
|
section[:html_area] == area
|
240
224
|
end
|
241
225
|
end
|
242
226
|
|
227
|
+
# Looks up umlaut_config.lookup!("resolve_sections"), then passes it through
|
228
|
+
# resolve_sections_filter config if available -- caches result in an iVar, for this
|
229
|
+
# action.
|
230
|
+
def config_resolve_sections
|
231
|
+
unless defined? @_config_resolve_sections
|
232
|
+
@_config_resolve_sections = umlaut_config.lookup!("resolve_sections", [])
|
233
|
+
|
234
|
+
umlaut_config.lookup!("resolve_sections_filter", []).each do |reorder_proc|
|
235
|
+
# clone it, so we aren't reordering the original
|
236
|
+
@_config_resolve_sections = @_config_resolve_sections.clone
|
237
|
+
reorder_proc.call(@user_request, @_config_resolve_sections)
|
238
|
+
end
|
239
|
+
end
|
240
|
+
|
241
|
+
return @_config_resolve_sections
|
242
|
+
end
|
243
|
+
|
243
244
|
def html_section_by_div_id(div_id)
|
244
245
|
umlaut_config.lookup!("resolve_sections", []).find do |defn|
|
245
246
|
defn[:div_id] == div_id
|