umlaut 3.1.0.pre2 → 3.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- ZmJhZjg0NmE2MDAxZTZiODZkOWE3Yzg1YzczM2I2MDUxYzc0MzM5Nw==
4
+ NGI2MGIwNmNkODZjOGY4MGRiZmVkYTBiYTBkYjdhYjE0NGU4Y2MyNQ==
5
5
  data.tar.gz: !binary |-
6
- OWU2MTA2NzMwMDE3NDFmZTBhZTZkMjk1NjhmYzczNmU3NmY0YThjYQ==
6
+ NjJhNWI0MDY3YjRkYTYwYTNiYzE4NDU0YTRhMGZkNmRmODE2YzMxYg==
7
7
  !binary "U0hBNTEy":
8
8
  metadata.gz: !binary |-
9
- MjkxODY1ZGFjMjFkOTliN2RmYjU0OTUxN2MxOTQxYzY0OGExY2U5ODg3ZTc2
10
- MDY2YmM5MmIxMDEyYTVjNjg5NDA4YjE4YmQ5NzI0ZDUzNDExYTkxMmMyNThh
11
- ZTIzZmQ4YTgyMWIyYzcxYTM3ZDI3MDQxZGU5N2UwMjc2ODIyMDk=
9
+ NDAyY2I2NDE5NTY4ZDg3ZDlmNWYxNzc5MDQ1ZTgwM2E3NmM5OWI2NTNlMzEx
10
+ MmFhN2U3ZTI2YzhlZGI4MjI0OTc0YTUwYWRmNTJlOTQyZWM5MGViODgzYWYy
11
+ ODlhYjk5OTQwZDBhNWYwYmUzZmZmM2M1NGE2YWUyYjZhY2M4NWE=
12
12
  data.tar.gz: !binary |-
13
- ZTg3NzMxZDlhMWY1Mjc0MjIyOGY4OGZiMTNjNGViMzQzZTdjMmNiMDNhYzA4
14
- ZWJkNzU5ZDEyYWQ4MjU4Mjk1MTY0YWJlMzhkMGExMDEyNWU5Y2I0MGU2NmQ3
15
- YjdjNTVkOGM0YzlkMWUxNmRmMzc2ZWY0OWYyZDc4NzBjYzUyZDg=
13
+ Y2MwZGE5MGU2NjJhMDQ1Y2NiNjRhODgwZWVkZTU4YWZiNDYwNjQ5YjgxOTE5
14
+ NDc4ZTgxMjY2OTAxNTc3NTZmYzNkYzZjNTE2NjRmOWE5NGI3MzM4YjdmOTk4
15
+ ODExOTdmNDBhZWFlYWQzNTRhZjY2MDRiY2U2ODg0Zjc1OTI4MmQ=
@@ -1,9 +1,10 @@
1
1
  /* expand_contract_toggle.js: Support for show more/hide more in lists of umlaut content.
2
+
3
+ Expand/collapse elements are already controlled via Bootstrap toggle,
4
+ this just adds some additional behavior in hooks to change our labels
5
+ and disclosure icons appropriately, and prevent following non-js href links.
2
6
  */
3
7
  jQuery(document).ready(function($) {
4
- $(".collapse_toggle").each(function(){
5
- $(this).collapse('toggle');
6
- });
7
8
  $(document).on("click", ".collapse-toggle", function(event) {
8
9
  event.preventDefault();
9
10
  return false;
@@ -23,3 +24,4 @@ jQuery(document).ready(function($) {
23
24
 
24
25
  });
25
26
  });
27
+
@@ -5,14 +5,14 @@ jQuery(document).ready(function($) {
5
5
  event.preventDefault();
6
6
 
7
7
  var originalLink = $(this)
8
- var valueContainer = $("#umlaut-permalink-value");
8
+ var valueContainer = $("#umlaut-permalink-container");
9
9
 
10
10
  if (! valueContainer.data("loaded")) {
11
- valueContainer.html('<i class="spinner"></i>').show();
11
+ valueContainer.html('<span class="umlaut-permalink-content"><i class="spinner"></i></span>').show();
12
12
 
13
13
  $.getJSON( originalLink.attr('href'), function(data) {
14
14
  var href = data.permalink;
15
- var a = $("<a/>");
15
+ var a = $("<a class='umlaut-permalink-content'/>");
16
16
  a.attr("href", href);
17
17
  a.text(href);
18
18
  valueContainer.html(a).data("loaded", true).show();
@@ -23,4 +23,4 @@ jQuery(document).ready(function($) {
23
23
  }
24
24
  });
25
25
 
26
- });
26
+ });
@@ -6,10 +6,39 @@
6
6
 
7
7
  At present, only expand/contract toggle behavior is actually supported,
8
8
  others are non-applicable or hard to get working on an external site
9
- due to cross-domain-origin stuff.
10
-
9
+ due to cross-domain-origin stuff.
10
+
11
+ And even this has become VERY HACKY AND FRAGILE these days --
12
+ this whole concept may be nontenable.
11
13
 
12
14
  *= require 'umlaut/expand_contract_toggle.js'
13
-
14
-
15
+
15
16
  */
17
+
18
+ /* Normal umlaut uses bootstrap collapse, and expand_contract_toggle.js
19
+ assumes bootstrap collapse. For vended use as here, provide our own
20
+ simple kind of crappy replacement for bootstrap collapse, which
21
+ will combine with expand_contract_toggle.js above to completely implement. */
22
+
23
+ jQuery(document).ready(function($) {
24
+
25
+ // In ordinary umlaut bootstrap collapsible, it automatically hides
26
+ // .collapse, but not with display:none. For our replacement here,
27
+ // we need to make sure it's initially hidden with display:none,
28
+ // we'll add a style to do so.
29
+ $('html > head').append($('<style> .collapse { display:none; }</style>'));
30
+
31
+
32
+ $(document).on("click", ".collapse-toggle", function(event) {
33
+ content = $( $(this).attr('data-target') );
34
+
35
+ if ( content.is(":visible") ) {
36
+ content.slideUp();
37
+ content.trigger("hide");
38
+ }
39
+ else {
40
+ content.slideDown();
41
+ content.trigger("show");
42
+ }
43
+ });
44
+ });
@@ -0,0 +1,10 @@
1
+ .expand_contract_toggle {
2
+ display: inline-block;
3
+ margin-bottom: $baseLineHeight / 2;
4
+ }
5
+
6
+ .expand_contract_content {
7
+ ul {
8
+ margin: 0;
9
+ }
10
+ }
@@ -38,6 +38,7 @@ body {
38
38
 
39
39
  .footer {
40
40
  @include umlaut-container();
41
+ @extend .muted;
41
42
  margin: {
42
43
  top: $baseLineHeight;
43
44
  }
@@ -35,8 +35,18 @@
35
35
  margin-left: $umlautIndent;
36
36
  }
37
37
 
38
- .umlaut-permalink-value {
39
- @include text-overflow;
38
+ .umlaut-permalink-container {
39
+ color: $grayDark;
40
+ @include text-overflow;
41
+ }
42
+ .umlaut-permalink-content {
43
+ background-color: $umlautBackgroundColor;
44
+ border-radius: $borderRadiusSmall;
45
+ border: 1px solid $btnBorder;
46
+ padding: 3px 6px;
47
+ .spinner {
48
+ vertical-align: baseline;
49
+ }
40
50
  }
41
51
 
42
52
  .umlaut-load-permalink i {
@@ -65,6 +65,14 @@
65
65
  }
66
66
  }
67
67
 
68
+ &.related_items {
69
+ // Margin between the 'cited by' and 'similar' lists
70
+ .response_list + .response_list {
71
+ margin-top: $baseLineHeight * 1.5;
72
+ }
73
+
74
+ }
75
+
68
76
  &.holding {
69
77
  .response_item i {
70
78
  @extend .umlaut_icons-famfamfam-book;
@@ -88,11 +96,9 @@
88
96
  .item_status_row {
89
97
  min-height: 0;
90
98
  }
91
- .collection_str, .call-number, .holding-status, .holding-actions {
92
- margin-left: 0;
93
- @media (max-width: 767px) {
94
- min-height: 0;
95
- }
99
+ .collection-str, .call-number, .holding-status, .holding-actions {
100
+ margin-left: 0;
101
+ min-height: 0;
96
102
  }
97
103
  .call-number, .holding-status, .holding-actions {
98
104
  padding-left: $umlautIndent;
@@ -223,8 +229,7 @@
223
229
 
224
230
  .resource-type {
225
231
  @extend .muted;
226
- margin: 0;
227
- font-weight: bold;
232
+ margin: 0;
228
233
  }
229
234
  h2.title {
230
235
  margin-top: 0;
@@ -1,5 +1,8 @@
1
1
  // Bootstrap Variable over-rides can go here
2
2
 
3
+ // We make lightGray used for .muted slightly darker than
4
+ //default #999
5
+ $grayLight: #888;
3
6
 
4
7
  @import "bootstrap";
5
8
  @import "bootstrap-responsive";
@@ -1,4 +1,3 @@
1
- # A mix-in for Rails controllers with some standard error recovery
2
1
  # logic.
3
2
  module Umlaut::ErrorHandling
4
3
  extend ActiveSupport::Concern
@@ -13,11 +12,18 @@ module Umlaut::ErrorHandling
13
12
  end
14
13
 
15
14
  def handle_general_error(exception)
15
+
16
16
  log_error_with_context(exception)
17
17
  @page_title = "Error!"
18
18
  # Only render this if we haven't done anything else
19
- # e.g. if some other gem may be handling its own errors
20
- render "error", :status => 500 unless performed?
19
+ # e.g. if some other gem may be handling its own errors
20
+ unless performed?
21
+ if params[:format] == "html"
22
+ render "error", :status => 500
23
+ else
24
+ render :text => "Unexpected fatal error, has been logged.", :status => 500
25
+ end
26
+ end
21
27
  end
22
28
  protected :handle_general_error
23
29
 
@@ -42,4 +48,4 @@ module Umlaut::ErrorHandling
42
48
  logger.send(severity, "#{message}\n\n")
43
49
  end
44
50
  protected :log_error_with_context
45
- end
51
+ end
@@ -11,10 +11,6 @@ module Umlaut::FooterHelper
11
11
  if @collection
12
12
  content = "".html_safe
13
13
 
14
- if umlaut_config.footer_credit
15
- content << umlaut_config.footer_credit + " | "
16
- end
17
-
18
14
  content << "Powered by ".html_safe + link_to("Umlaut", "https://github.com/team-umlaut/umlaut") + ". ".html_safe
19
15
 
20
16
  credit_segments = []
@@ -84,11 +84,13 @@ module Umlaut::Helper
84
84
  # and loaded with content AJAXy.
85
85
  def render_umlaut_permalink_content
86
86
  content_tag("div",
87
- :id => "umlaut-permalink-value",
88
- :class=> "umlaut-permalink-value",
87
+ :id => "umlaut-permalink-container",
88
+ :class=> "umlaut-permalink-container",
89
89
  :style => "display: none;",
90
90
  :'data-loaded' => current_permalink_url.present? ) do
91
- link_to(current_permalink_url, current_permalink_url) if current_permalink_url
91
+ content_tag("span", :class => "umlaut-permalink-content") do
92
+ link_to(current_permalink_url, current_permalink_url) if current_permalink_url
93
+ end
92
94
  end
93
95
  end
94
96
 
@@ -91,7 +91,10 @@ module UmlautHttp
91
91
 
92
92
  return http_fetch(response['location'], options)
93
93
  else
94
- response.value if options[:raise_on_http_error_code]
94
+ if options[:raise_on_http_error_code]
95
+ Rails.logger.warn("UmlautHttp#http_fetch: unexpected non-successful response: #{uri}: #{response}") unless response.is_a?(Net::HTTPSuccess)
96
+ response.value
97
+ end
95
98
  return response
96
99
  end
97
100
  end
@@ -286,7 +286,7 @@ class Referent < ActiveRecord::Base
286
286
  # keep calling it. profiling shows it DOES make a difference.
287
287
  my_metadata = self.metadata
288
288
 
289
- if my_metadata['atitle'] && ! my_metadata['atitle'].blank?
289
+ if my_metadata['atitle'].present?
290
290
  citation[:title] = my_metadata['atitle']
291
291
  citation[:title_label], citation[:container_label] =
292
292
  case my_metadata['genre']
@@ -382,7 +382,7 @@ class Referent < ActiveRecord::Base
382
382
  case self.metadata["genre"]
383
383
  when 'article' then 'journal'
384
384
  when 'bookitem' then 'book'
385
- else self.metadata['genre']
385
+ else self.metadata['genre'] || self.format
386
386
  end
387
387
  end
388
388
 
@@ -162,17 +162,7 @@ class Request < ActiveRecord::Base
162
162
  end
163
163
 
164
164
 
165
- # See can_dispatch below, you probably want that instead.
166
- # This method checks to see if a particular service has been dispatched, and
167
- # is succesful or in progress---that is, if this method returns false,
168
- # you might want to dispatch the service (again). If it returns true though,
169
- # don't, it's been done.
170
- def dispatched?(service)
171
- ds= self.dispatched_services.find(:first, :conditions=>{:service_id => service.service_id})
172
- # Return true if it exists and is any value but FailedTemporary.
173
- # FailedTemporary, it's worth running again, the others we shouldn't.
174
- return (! ds.nil?) && (ds.status != DispatchedService::FailedTemporary)
175
- end
165
+
176
166
  # Someone asks us if it's okay to dispatch this guy. Only if it's
177
167
  # marked as Queued, or Failed---otherwise it should be already working,
178
168
  # or done.
@@ -182,6 +172,36 @@ class Request < ActiveRecord::Base
182
172
  return ds.nil? || (ds.status == DispatchedService::Queued) || (ds.status == DispatchedService::FailedTemporary)
183
173
  end
184
174
 
175
+ # Sets a DispatchedService object attached to this Request, for given
176
+ # service, marked InProgress -- but only if existing DispatchedService object did
177
+ # not already exist, or existed and was marked Queued or FailedTemporary.
178
+ # Returns true if was able to register as InProgress for given service,
179
+ # otherwise false.
180
+ #
181
+ # Wrapped in a connection_pool.with_connection, safe for calling from threaded
182
+ # context.
183
+ def register_in_progress(service)
184
+ ActiveRecord::Base.connection_pool.with_connection do
185
+ ds = self.find_dispatch_object( service )
186
+ if ds
187
+ # Already existed, need to update atomically, only if it's got
188
+ # a compatible existing status.
189
+ updated_count = self.dispatched_services.where(:id => ds.id,
190
+ :status => [DispatchedService::Queued || DispatchedService::FailedTemporary] ).
191
+ update_all(:status => DispatchedService::InProgress)
192
+
193
+ return (updated_count > 0)
194
+ else
195
+ # create new one, if race condition happened in between `find` above and now,
196
+ # we might wind up with a constraint violation raised, sorry.
197
+ ds= self.new_dispatch_object!(service, DispatchedService::InProgress)
198
+ ds.save!
199
+ return true
200
+ end
201
+
202
+ end
203
+ end
204
+
185
205
 
186
206
 
187
207
  # Create a ServiceResponse and it's associated ServiceType(s) object,
@@ -24,20 +24,8 @@ class ServiceWave
24
24
 
25
25
  # Safe to call in a thread. Returns true or false depending on
26
26
  # whether dispatch should proceed.
27
- def prepare_dispatch!(request, service, session_id)
28
- can_dispatch = false
29
-
30
- Request.connection_pool.with_connection do
31
- if request.can_dispatch?( service)
32
- # Mark this service as in progress in the dispatch table.
33
- request.dispatched( service, DispatchedService::InProgress )
34
- # remember the rails session id.
35
- service.session_id = session_id
36
-
37
- can_dispatch = true
38
- end
39
- end
40
- return can_dispatch
27
+ def prepare_dispatch!(request, service)
28
+ return request.register_in_progress(service)
41
29
  end
42
30
 
43
31
  def handle(request, session_id)
@@ -80,7 +68,7 @@ class ServiceWave
80
68
  end
81
69
 
82
70
 
83
- if prepare_dispatch!(local_request, local_service, session_id)
71
+ if prepare_dispatch!(local_request, local_service)
84
72
  local_service.handle_wrapper(local_request)
85
73
  else
86
74
  Rails.logger.info("NOT launching service #{local_service.service_id}, level #{@priority_level}, request #{local_request.id}: not in runnable state") if @log_timing
@@ -97,7 +85,7 @@ class ServiceWave
97
85
 
98
86
  # Log it too, although experience shows it may never make it to the
99
87
  # log for mysterious reasons.
100
- Rails.logger.error(TermColor.color("Umlaut: Threaded service raised exception.", :red, true) + " Service: #{service.service_id}, #{e.class} #{e.message}\n #{clean_backtrace(e).join("\n ")}")
88
+ Rails.logger.error(TermColor.color("Umlaut: Threaded service raised exception.", :red, true) + " Service: #{service.service_id}, #{e.class} #{e.message}. Backtrace:\n #{e.backtrace.join("\n ")}")
101
89
 
102
90
  # And stick it in a thread variable too
103
91
  Thread.current[:exception] = e
@@ -107,7 +95,7 @@ class ServiceWave
107
95
  end
108
96
  else # not threaded
109
97
  begin
110
- if prepare_dispatch!(request, service, session_id)
98
+ if prepare_dispatch!(request, service)
111
99
  service.handle_wrapper(request)
112
100
  else
113
101
  Rails.logger.info("NOT launching service #{service.service_id}, level #{@priority_level}, request #{request.id}: not in runnable state") if @log_timing
@@ -155,6 +155,7 @@ class Blacklight < Service
155
155
  # Send a CQL request for any identifiers present.
156
156
  # Ask for for an atom response with embedded marc21 back.
157
157
  def blacklight_precise_search_url(request, format = "marc")
158
+
158
159
  # Add search clauses for our identifiers, if we have them and have a configured search field for them.
159
160
  clauses = []
160
161
  added = []
@@ -209,10 +210,8 @@ class Blacklight < Service
209
210
  # phrase search for title, just raw dismax for author
210
211
  # Embed quotes inside the quoted value, need to backslash-quote for CQL,
211
212
  # and backslash the backslashes for ruby literal.
212
- clauses.push("#{@bl_fields["title"]} = \"\\\"#{title}\\\"\"")
213
- clauses.push("#{@bl_fields["author"]} = \"#{author}\"") if author
214
-
215
-
213
+ clauses.push("#{@bl_fields["title"]} = \"\\\"#{remove_quotes_for_phrase_value title}\\\"\"")
214
+ clauses.push("#{@bl_fields["author"]} = \"#{remove_quotes_for_phrase_value author}\"") if author
216
215
 
217
216
  url = base_url + "?search_field=#{@cql_search_field}&content_format=#{options[:content_format]}&q=#{CGI.escape(clauses.join(" AND "))}"
218
217
 
@@ -224,6 +223,16 @@ class Blacklight < Service
224
223
  return url
225
224
  end
226
225
 
226
+ # We're putting a value inside of CQL double quotes. What if
227
+ # it has double quote literal in it already? Will be a CQL syntax
228
+ # error if we do nothing. Can we escape it somehow? CQL is really
229
+ # unclear, we're ALREADY backslash escaping the phrase quotes themselves!
230
+ # We just replace them with space, should work for our actual indexing.
231
+ def remove_quotes_for_phrase_value(str)
232
+ str.gsub('"', " ")
233
+ end
234
+
235
+
227
236
  # Takes a url that will return atom response of dlf_expanded content.
228
237
  # Adds Umlaut "holding" ServiceResponses for dlf_expanded, as appropriate.
229
238
  # Returns number of holdings added.
@@ -249,14 +249,14 @@ class InternetArchive < Service
249
249
  # commands even within quotes.
250
250
  output = string.downcase
251
251
 
252
- # Remove parens, semi-colons, brackets, hyphens -- they all mess
252
+ # Remove parens, semi-colons, brackets, hyphens, colons -- they all mess
253
253
  # up IA, which thinks they are special chars. Remove double quote,
254
254
  # special char, which sometimes we want to use ourselves. Replace
255
255
  # all with spaces to avoid accidentally conjoining words.
256
256
  # (could be
257
257
  # escaping instead? Not worth it, we don't want to search
258
258
  # on these anyway. Remove ALL punctuation? Not sure.)
259
- output.gsub!(/[)(\]\[;"\=\-]/, ' ')
259
+ output.gsub!(/[)(\]\[;"\=\-\:]/, ' ')
260
260
 
261
261
  return output
262
262
  end
@@ -33,7 +33,6 @@
33
33
 
34
34
  class Service
35
35
  attr_reader :priority, :service_id, :url, :task, :status, :name, :group
36
- attr_writer :session_id
37
36
  attr_accessor :request
38
37
  @@required_params_for_subclass = {} # initialize class var
39
38
 
@@ -169,14 +168,7 @@ class Service
169
168
  end
170
169
 
171
170
 
172
- def session_id
173
- unless (@session_id)
174
- raise Exception.new("This service has not been initialized with a request!") unless request
175
-
176
- @session_id = request.session_id
177
- end
178
- return @session_id
179
- end
171
+
180
172
 
181
173
  # This method is called by Umlaut when user clicks on a service response.
182
174
  # Default implementation here just returns response['url']. You can
@@ -17,13 +17,7 @@
17
17
  <%= yield %>
18
18
  </div>
19
19
 
20
- <div id="footer" class="footer">
21
- <%= render_service_credits %>
22
- <!-- links to aid in debugging openurls gone wrong when in production -->
23
- <%= link_to_test_resolve %>
24
- <%= link_to_direct_sfx %>
25
- <%= link_to_toggle_debug_info %>
26
- </div>
20
+ <%= render :partial => "umlaut/footer" %>
27
21
  </div>
28
22
  </body>
29
23
  </html>
@@ -17,7 +17,7 @@ all_responses = fulltxt + title_level_fulltxt %>
17
17
  if (index == fulltxt.length && !title_level_request?) %>
18
18
  </ul>
19
19
  <div class="section-subheading title-level-link-warning">
20
- <h4><%= @user_request.referent.container_type_of_thing.titlecase %>-level Page Only</h4>
20
+ <h4><%= (@user_request.referent.container_type_of_thing || "Container").titlecase %>-level Page Only</h4>
21
21
  <p><span class="notice">Can not link directly to citation. Dates or extent of coverage may be unknown.</span></p>
22
22
  </div>
23
23
  <ul class="response_list"><%
@@ -29,4 +29,4 @@ all_responses = fulltxt + title_level_fulltxt %>
29
29
  end %>
30
30
  <%= render( renderer.spinner_render_hash) if renderer.services_in_progress? %>
31
31
  </div>
32
- </div>
32
+ </div>
@@ -61,8 +61,8 @@
61
61
  end %>
62
62
  <%= # Pages
63
63
  if ref_meta.has_key?("spage")
64
- page = ref_meta["spage"]
65
- page << " - #{ref_meta["epage"]}" if ref_meta.has_key?("epage")
64
+ pages = ref_meta["spage"]
65
+ pages = "#{pages} - #{ref_meta["epage"]}" if ref_meta.has_key?("epage")
66
66
  content_tag(:dt, "Page:", :class => "page") +
67
67
  content_tag(:dd, pages, :class => "page")
68
68
  end %>
@@ -70,4 +70,4 @@
70
70
  <div class="umlaut-citation-link span3">
71
71
  <%= resolver_link(@current_context_object, {:target => search_result_target_window}) %>
72
72
  </div>
73
- </div>
73
+ </div>
@@ -0,0 +1,15 @@
1
+ <%# local implementers may over-ride this partial for custom local header.
2
+ This partial is called by default umlaut layout. %>
3
+
4
+ <div id="footer" class="footer">
5
+ <% if umlaut_config.footer_credit.present? %>
6
+ <%= umlaut_config.footer_credit %> |
7
+ <% end %>
8
+
9
+ <%= render_service_credits %>
10
+
11
+ <!-- links to aid in debugging openurls gone wrong when in production -->
12
+ <%= link_to_test_resolve %>
13
+ <%= link_to_direct_sfx %>
14
+ <%= link_to_toggle_debug_info %>
15
+ </div>
@@ -3,11 +3,9 @@
3
3
  <div class="error_section">
4
4
 
5
5
  <div class="heading">
6
- <%= image_tag "error.gif" %>
7
- <h1>Sorry, there was an error processing your request.</h1>
6
+ <h1>Sorry, something has gone wrong.</h1>
8
7
  </div>
9
-
10
-
8
+
11
9
  <h2>Please try one of the following options:</h2>
12
10
  <ol>
13
11
  <li>If you entered this URL yourself, please check your URL for errors. </li>
@@ -42,4 +40,4 @@
42
40
 
43
41
  <br/>
44
42
 
45
- </div>
43
+ </div>
@@ -237,15 +237,3 @@ default:
237
237
  # list them in array here:
238
238
  #exclude: [ host.unversity.edu, otherhost.somewhere.com]
239
239
 
240
-
241
- # Use of SFX api means that SFX can no longer keep statistics on
242
- # clickthroughs. This link out filter will attempt to fake SFX into
243
- # thinking a direct click happened when user clicks on an SFX link
244
- # via Umlaut. This is VERY fragile logic, required reverse engineering
245
- # SFX and faking it out, still doesn't work all the time. But works
246
- # much of the time.
247
- SFX_backchannel_record:
248
- disabled: true
249
- type: SfxBackchannelRecord
250
- task: link_out_filter
251
- priority: 6
@@ -20,20 +20,6 @@ module Umlaut
20
20
  *= require 'umlaut'
21
21
  *}
22
22
  end
23
- append_to_file("app/assets/stylesheets/application.css") do
24
- %q{
25
-
26
- /* Umlaut needs a jquery-ui theme CSS. Here's an easy way to get one,
27
- * you can replace with another theme.
28
- *
29
- * Note, CSS @import needs to be the first line in a CSS file. This will
30
- * become so if 'require_self' is included above, as the FIRST sprockets
31
- * require, and this @import line is the first non-comment line in this
32
- * file.
33
- */
34
- @import url(//ajax.googleapis.com/ajax/libs/jqueryui/1.8.16/themes/ui-lightness/jquery-ui.css);
35
- }
36
- end
37
23
  else
38
24
  say_status("skipped", "Your application.css already references Umlaut", :yellow)
39
25
  end
data/lib/umlaut/routes.rb CHANGED
@@ -76,7 +76,9 @@ module Umlaut
76
76
  # ResolveController still uses rails 2.0 style 'wildcard' routes,
77
77
  # TODO tighten this up to only match what oughta be matched.
78
78
  # Note: This route will make all actions in this controller accessible via GET requests.
79
-
79
+ # We do make sure to prevent resolve/index/:id, should always be resolve/index?id=foo,
80
+ # to keep OpenURLs good, and avoid errors with DOI's with slashes in em etc.
81
+ match 'resolve(.:format)' => "resolve#index"
80
82
  match 'resolve(/:action(/:id(.:format)))' => "resolve"
81
83
  end
82
84
  end
@@ -1,3 +1,3 @@
1
1
  module Umlaut
2
- VERSION = "3.1.0.pre2"
2
+ VERSION = "3.1.0"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: umlaut
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.1.0.pre2
4
+ version: 3.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jonathan Rochkind, et al
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-05-13 00:00:00.000000000 Z
11
+ date: 2013-06-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -204,42 +204,42 @@ dependencies:
204
204
  requirements:
205
205
  - - ~>
206
206
  - !ruby/object:Gem::Version
207
- version: 1.3.0
207
+ version: '1.3'
208
208
  type: :development
209
209
  prerelease: false
210
210
  version_requirements: !ruby/object:Gem::Requirement
211
211
  requirements:
212
212
  - - ~>
213
213
  - !ruby/object:Gem::Version
214
- version: 1.3.0
214
+ version: '1.3'
215
215
  - !ruby/object:Gem::Dependency
216
216
  name: vcr
217
217
  requirement: !ruby/object:Gem::Requirement
218
218
  requirements:
219
219
  - - ~>
220
220
  - !ruby/object:Gem::Version
221
- version: 2.4.0
221
+ version: 2.5.0
222
222
  type: :development
223
223
  prerelease: false
224
224
  version_requirements: !ruby/object:Gem::Requirement
225
225
  requirements:
226
226
  - - ~>
227
227
  - !ruby/object:Gem::Version
228
- version: 2.4.0
228
+ version: 2.5.0
229
229
  - !ruby/object:Gem::Dependency
230
230
  name: webmock
231
231
  requirement: !ruby/object:Gem::Requirement
232
232
  requirements:
233
233
  - - ~>
234
234
  - !ruby/object:Gem::Version
235
- version: 1.9.0
235
+ version: 1.11.0
236
236
  type: :development
237
237
  prerelease: false
238
238
  version_requirements: !ruby/object:Gem::Requirement
239
239
  requirements:
240
240
  - - ~>
241
241
  - !ruby/object:Gem::Version
242
- version: 1.9.0
242
+ version: 1.11.0
243
243
  - !ruby/object:Gem::Dependency
244
244
  name: sunspot_rails
245
245
  requirement: !ruby/object:Gem::Requirement
@@ -318,6 +318,7 @@ files:
318
318
  - app/assets/stylesheets/umlaut.css.scss
319
319
  - app/assets/stylesheets/umlaut/_modal.scss
320
320
  - app/assets/stylesheets/umlaut/_spinner.scss
321
+ - app/assets/stylesheets/umlaut/_expand_contract.scss
321
322
  - app/assets/stylesheets/umlaut/_mixins.scss
322
323
  - app/assets/stylesheets/umlaut/_admin.scss
323
324
  - app/assets/stylesheets/umlaut/_misc.scss
@@ -438,6 +439,7 @@ files:
438
439
  - app/views/resolve/_manually_entered_warning.html.erb
439
440
  - app/views/resolve/_api_in_progress.xml.erb
440
441
  - app/views/testing/index.html.erb
442
+ - app/views/umlaut/_footer.html.erb
441
443
  - app/views/umlaut/_header.html.erb
442
444
  - app/views/umlaut/error.html.erb
443
445
  - app/views/umlaut/README
@@ -713,9 +715,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
713
715
  version: '0'
714
716
  required_rubygems_version: !ruby/object:Gem::Requirement
715
717
  requirements:
716
- - - ! '>'
718
+ - - ! '>='
717
719
  - !ruby/object:Gem::Version
718
- version: 1.3.1
720
+ version: '0'
719
721
  requirements: []
720
722
  rubyforge_project:
721
723
  rubygems_version: 2.0.3