blacklight 4.0.0 → 4.0.1

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.
@@ -0,0 +1,7 @@
1
+ ---
2
+ !binary "U0hBMQ==":
3
+ metadata.gz: fd53955e7766d24bb6321e2f1c8276115ef7489f
4
+ data.tar.gz: 648c5e33395aa063a7b827e6c1418c12ab84aeae
5
+ !binary "U0hBNTEy":
6
+ metadata.gz: e73973c3a91c7dfbd0dabea81280af47be472a0c12a89dc37b3060db482d7325c3d564cd510ea006282dc1303838131e1c2bf1106f0a4b52fa983a0c1a660e27
7
+ data.tar.gz: 63b8d103ae752c8cb697eb7c831501bb1b535fccdb2df53bb49c77546dd6e2f756bd904fb54eedfa65fef735ba9e9a9ec205a887ada8090149f8826f022d3fef
data/VERSION CHANGED
@@ -1 +1 @@
1
- 4.0.0
1
+ 4.0.1
@@ -4,9 +4,6 @@ Blacklight.setup_modal = function(link_selector, form_selector, launch_modal) {
4
4
  link = $(this)
5
5
 
6
6
  e.preventDefault();
7
- if (launch_modal) {
8
- GlobalModalManager.loading();
9
- }
10
7
 
11
8
  var jqxhr = $.ajax({
12
9
  url: link.attr('href'),
@@ -1,5 +1,5 @@
1
1
  /* ===========================================================
2
- * bootstrap-modal.js
2
+ * bootstrap-modal.js v2.0
3
3
  * ===========================================================
4
4
  * Copyright 2012 Jordan Schroter
5
5
  *
@@ -32,7 +32,7 @@
32
32
 
33
33
  constructor: Modal,
34
34
 
35
- init: function(element, options){
35
+ init: function (element, options) {
36
36
  this.options = options;
37
37
 
38
38
  this.$element = $(element)
@@ -40,8 +40,13 @@
40
40
 
41
41
  this.options.remote && this.$element.find('.modal-body').load(this.options.remote);
42
42
 
43
- var manager = typeof this.options.manager === 'function' ? this.options.manager.call(this) : this.options.manager;
44
- manager && manager.appendModal && manager.appendModal(this);
43
+ var manager = typeof this.options.manager === 'function' ?
44
+ this.options.manager.call(this) : this.options.manager;
45
+
46
+ manager = manager.appendModal ?
47
+ manager : $(manager).modalmanager().data('modalmanager');
48
+
49
+ manager.appendModal(this);
45
50
  },
46
51
 
47
52
  toggle: function () {
@@ -52,6 +57,8 @@
52
57
  var that = this,
53
58
  e = $.Event('show');
54
59
 
60
+ if (this.isShown) return;
61
+
55
62
  this.$element.triggerHandler(e);
56
63
 
57
64
  if (e.isDefaultPrevented()) return;
@@ -60,7 +67,7 @@
60
67
  this.$element.css('width', this.options.width);
61
68
 
62
69
  var that = this;
63
- this.$element.css('margin-left', function(){
70
+ this.$element.css('margin-left', function () {
64
71
  if (/%/ig.test(that.options.width)){
65
72
  return -(parseInt(that.options.width) / 2) + '%';
66
73
  } else {
@@ -68,9 +75,9 @@
68
75
  }
69
76
  });
70
77
  }
71
-
72
78
 
73
79
  var prop = this.options.height ? 'height' : 'max-height';
80
+
74
81
  var value = this.options.height || this.options.maxHeight;
75
82
 
76
83
  if (value){
@@ -80,6 +87,8 @@
80
87
  }
81
88
 
82
89
  this.escape();
90
+
91
+ this.tab();
83
92
 
84
93
  this.options.loading && this.loading();
85
94
  },
@@ -87,8 +96,6 @@
87
96
  hide: function (e) {
88
97
  e && e.preventDefault();
89
98
 
90
- var that = this;
91
-
92
99
  e = $.Event('hide');
93
100
 
94
101
  this.$element.triggerHandler(e);
@@ -98,6 +105,8 @@
98
105
  this.isShown = false;
99
106
 
100
107
  this.escape();
108
+
109
+ this.tab();
101
110
 
102
111
  this.isLoading && this.loading();
103
112
 
@@ -105,6 +114,8 @@
105
114
 
106
115
  this.$element
107
116
  .removeClass('in')
117
+ .removeClass('animated')
118
+ .removeClass(this.options.attentionAnimation)
108
119
  .removeClass('modal-overflow')
109
120
  .attr('aria-hidden', true);
110
121
 
@@ -112,14 +123,47 @@
112
123
  this.hideWithTransition() :
113
124
  this.hideModal();
114
125
  },
126
+
127
+ tab: function () {
128
+ var that = this;
129
+
130
+ if (this.isShown && this.options.consumeTab) {
131
+ this.$element.on('keydown.tabindex.modal', '[data-tabindex]', function (e) {
132
+ if (e.keyCode && e.keyCode == 9){
133
+ var $next = $(this),
134
+ $rollover = $(this);
135
+
136
+ that.$element.find('[data-tabindex]:enabled:not([readonly])').each(function (e) {
137
+ if (!e.shiftKey){
138
+ $next = $next.data('tabindex') < $(this).data('tabindex') ?
139
+ $next = $(this) :
140
+ $rollover = $(this);
141
+ } else {
142
+ $next = $next.data('tabindex') > $(this).data('tabindex') ?
143
+ $next = $(this) :
144
+ $rollover = $(this);
145
+ }
146
+ });
147
+
148
+ $next[0] !== $(this)[0] ?
149
+ $next.focus() : $rollover.focus();
150
+
151
+ e.preventDefault();
152
+
153
+ }
154
+ });
155
+ } else if (!this.isShown) {
156
+ this.$element.off('keydown.tabindex.modal');
157
+ }
158
+ },
115
159
 
116
160
  escape: function () {
117
161
  var that = this;
118
162
  if (this.isShown && this.options.keyboard) {
119
163
  if (!this.$element.attr('tabindex')) this.$element.attr('tabindex', -1);
120
164
 
121
- this.$element.on('keyup.dismiss.modal', function ( e ) {
122
- e.which == 27 && that.hide()
165
+ this.$element.on('keyup.dismiss.modal', function (e) {
166
+ e.which == 27 && that.hide();
123
167
  });
124
168
  } else if (!this.isShown) {
125
169
  this.$element.off('keyup.dismiss.modal')
@@ -155,15 +199,15 @@
155
199
  }
156
200
 
157
201
  },
158
-
159
- removeLoading: function(){
202
+
203
+ removeLoading: function () {
160
204
  this.$loading.remove();
161
205
  this.$loading = null;
162
206
  this.isLoading = false;
163
207
  },
164
208
 
165
- loading: function(callback){
166
- callback = callback || function(){};
209
+ loading: function (callback) {
210
+ callback = callback || function () {};
167
211
 
168
212
  var animate = this.$element.hasClass('fade') ? 'fade' : '';
169
213
 
@@ -189,7 +233,7 @@
189
233
 
190
234
  var that = this;
191
235
  $.support.transition && this.$element.hasClass('fade')?
192
- this.$loading.one($.support.transition.end, function(){ that.removeLoading() }) :
236
+ this.$loading.one($.support.transition.end, function () { that.removeLoading() }) :
193
237
  that.removeLoading();
194
238
 
195
239
  } else if (callback) {
@@ -197,9 +241,37 @@
197
241
  }
198
242
  },
199
243
 
200
- toggleLoading: function(callback){ this.loading(callback); },
244
+ focus: function () {
245
+ var $focusElem = this.$element.find(this.options.focusOn);
246
+
247
+ $focusElem = $focusElem.length ? $focusElem : this.$element;
248
+
249
+ $focusElem.focus();
250
+ },
251
+
252
+ attention: function (){
253
+ // NOTE: transitionEnd with keyframes causes odd behaviour
254
+
255
+ if (this.options.attentionAnimation){
256
+ this.$element
257
+ .removeClass('animated')
258
+ .removeClass(this.options.attentionAnimation);
259
+
260
+ var that = this;
261
+
262
+ setTimeout(function () {
263
+ that.$element
264
+ .addClass('animated')
265
+ .addClass(that.options.attentionAnimation);
266
+ }, 0);
267
+ }
268
+
269
+
270
+ this.focus();
271
+ },
201
272
 
202
- destroy: function(){
273
+
274
+ destroy: function () {
203
275
  var e = $.Event('destroy');
204
276
  this.$element.triggerHandler(e);
205
277
  if (e.isDefaultPrevented()) return;
@@ -207,19 +279,17 @@
207
279
  this.teardown();
208
280
  },
209
281
 
210
- teardown: function(){
211
- var $parent = this.$parent;
212
-
213
- if (!$parent.length){
282
+ teardown: function () {
283
+ if (!this.$parent.length){
214
284
  this.$element.remove();
215
285
  this.$element = null;
216
286
  return;
217
287
  }
218
-
219
- if ($parent !== this.$element.parent()){
288
+
289
+ if (this.$parent !== this.$element.parent()){
220
290
  this.$element.appendTo(this.$parent);
221
291
  }
222
-
292
+
223
293
  this.$element.off('.modal');
224
294
  this.$element.removeData('modal');
225
295
  this.$element
@@ -253,7 +323,10 @@
253
323
  height: null,
254
324
  maxHeight: null,
255
325
  modalOverflow: false,
256
- manager: function(){ return GlobalModalManager },
326
+ consumeTab: true,
327
+ focusOn: null,
328
+ attentionAnimation: 'shake',
329
+ manager: 'body',
257
330
  spinner: '<div class="loading-spinner" style="width: 200px; margin-left: -100px;"><div class="progress progress-striped active"><div class="bar" style="width: 100%;"></div></div></div>'
258
331
  }
259
332
 
@@ -1,5 +1,5 @@
1
1
  /* ===========================================================
2
- * bootstrap-modalmanager.js
2
+ * bootstrap-modalmanager.js v2.0
3
3
  * ===========================================================
4
4
  * Copyright 2012 Jordan Schroter.
5
5
  *
@@ -16,31 +16,10 @@
16
16
  * limitations under the License.
17
17
  * ========================================================== */
18
18
 
19
- !function($){
19
+ !function ($) {
20
20
 
21
21
  "use strict"; // jshint ;_;
22
22
 
23
- var baseModalzIndex, baseModalAbszIndex, baseBackdropzIndex, baseBackdropAbszIndex, zIndexFactor;
24
-
25
- $(function(){
26
- var $baseModal = $('<div class="modal hide" />').appendTo('body'),
27
- $baseBackdrop = $('<div class="modal-backdrop hide" />').appendTo('body'),
28
- $baseModalAbs = $('<div class="modal modal-absolute hide" />').appendTo('body'),
29
- $baseBackdropAbs = $('<div class="modal-backdrop modal-absolute hide" />').appendTo('body');
30
-
31
- baseModalzIndex = +$baseModal.css('z-index'),
32
- baseModalAbszIndex = +$baseModalAbs.css('z-index'),
33
- baseBackdropzIndex = +$baseBackdrop.css('z-index'),
34
- baseBackdropAbszIndex = +$baseBackdropAbs.css('z-index'),
35
- zIndexFactor = baseModalzIndex - baseBackdropzIndex;
36
-
37
- $baseModal.remove();
38
- $baseBackdrop.remove();
39
- $baseModalAbs.remove();
40
- $baseBackdropAbs.remove();
41
- $baseBackdrop = $baseModal = $baseModalAbs = $baseBackdrop = null;
42
- });
43
-
44
23
  /* MODAL MANAGER CLASS DEFINITION
45
24
  * ====================== */
46
25
 
@@ -48,61 +27,44 @@
48
27
  this.init(element, options);
49
28
  }
50
29
 
51
- window.ModalManager = ModalManager;
52
-
53
30
  ModalManager.prototype = {
54
31
 
55
32
  constructor: ModalManager,
56
33
 
57
- init: function(element, options){
34
+ init: function (element, options) {
58
35
  this.$element = $(element);
59
36
  this.options = $.extend({}, $.fn.modalmanager.defaults, this.$element.data(), typeof options == 'object' && options);
60
37
  this.stack = [];
61
- this.isBody = this.$element[0] === $('body')[0];
62
-
63
- this.$container = this.$element.find('.modal-container');
64
- this.$parent = this.$container.length ? this.$container : this.$element;
65
-
66
- this.$element.toggleClass('has-modal-container', !!this.$container.length);
38
+ this.backdropCount = 0;
67
39
  },
68
40
 
69
- createModal: function(element, options){
41
+ createModal: function (element, options) {
70
42
  $(element).modal($.extend({ manager: this }, options));
71
43
  },
72
44
 
73
- appendModal: function(modal){
45
+ appendModal: function (modal) {
74
46
  this.stack.push(modal);
75
47
 
76
48
  var that = this;
77
49
 
78
- modal.$element.on('show.modalmanager', targetIsModal(function(e){
50
+ modal.$element.on('show.modalmanager', targetIsSelf(function (e) {
79
51
  modal.isShown = true;
80
52
 
53
+ var transition = $.support.transition && modal.$element.hasClass('fade');
54
+
81
55
  that.$element
82
56
  .toggleClass('modal-open', that.hasOpenModal())
83
57
  .toggleClass('page-overflow', $(window).height() < that.$element.height());
58
+
59
+ modal.$parent = modal.$element.parent();
84
60
 
61
+ modal.$container = that.createContainer(modal);
85
62
 
86
- var $scrollElement = (that.$container.length ? that.$container :
87
- (that.isBody ? $(window) : that.$element));
88
-
89
- var modalOverflow = $(window).height() < modal.$element.height() || modal.options.modalOverflow;
63
+ modal.$element.appendTo(modal.$container);
90
64
 
91
- modal.$element
92
- .toggleClass('modal-overflow', modalOverflow)
93
- .css('margin-top', $scrollElement.scrollTop() - (modalOverflow ? 0 : modal.$element.height()/2))
94
- .css('z-index', (!that.isBody ? baseModalAbszIndex : baseModalzIndex)
95
- + (zIndexFactor * that.getIndexOfModal(modal)));
65
+ var modalOverflow = $(window).height() < modal.$element.height() || modal.options.modalOverflow;
96
66
 
97
67
  that.backdrop(modal, function () {
98
- var transition = $.support.transition && modal.$element.hasClass('fade')
99
-
100
-
101
- modal.$parent = modal.$element.parent();
102
- if (!modal.$parent.length || modal.$parent[0] !== that.$parent[0]) {
103
- modal.$element.detach().appendTo(that.$parent);
104
- }
105
-
106
68
 
107
69
  modal.$element.show();
108
70
 
@@ -113,11 +75,12 @@
113
75
  }
114
76
 
115
77
  modal.$element
78
+ .toggleClass('modal-overflow', modalOverflow)
79
+ .css('margin-top', modalOverflow ? 0 : 0 - modal.$element.height()/2)
116
80
  .addClass('in')
117
- .attr('aria-hidden', false)
118
- .toggleClass('modal-absolute', !that.isBody);
81
+ .attr('aria-hidden', false);
119
82
 
120
- var complete = function(){
83
+ var complete = function () {
121
84
  that.setFocus();
122
85
  modal.$element.triggerHandler('shown');
123
86
  }
@@ -128,12 +91,13 @@
128
91
  });
129
92
  }));
130
93
 
131
- modal.$element.on('hidden.modalmanager', targetIsModal(function(e){
94
+ modal.$element.on('hidden.modalmanager', targetIsSelf(function (e) {
95
+
132
96
  that.backdrop(modal);
133
97
 
134
98
  if (modal.$backdrop){
135
99
  $.support.transition && modal.$element.hasClass('fade')?
136
- modal.$backdrop.one($.support.transition.end, function(){ that.destroyModal(modal) }) :
100
+ modal.$backdrop.one($.support.transition.end, function () { that.destroyModal(modal) }) :
137
101
  that.destroyModal(modal);
138
102
  } else {
139
103
  that.destroyModal(modal);
@@ -141,25 +105,33 @@
141
105
 
142
106
  }));
143
107
 
144
- modal.$element.on('destroy.modalmanager', targetIsModal(function(e){
108
+ modal.$element.on('destroy.modalmanager', targetIsSelf(function (e) {
145
109
  that.removeModal(modal);
146
110
  }));
147
111
  },
148
112
 
149
- destroyModal: function(modal){
113
+ destroyModal: function (modal) {
114
+
150
115
  modal.destroy();
116
+
151
117
  var hasOpenModal = this.hasOpenModal();
118
+
152
119
  this.$element.toggleClass('modal-open', hasOpenModal);
120
+
153
121
  if (!hasOpenModal){
154
122
  this.$element.removeClass('page-overflow');
155
123
  }
124
+
125
+ this.removeContainer(modal);
126
+
156
127
  this.setFocus();
157
128
  },
158
129
 
159
- hasOpenModal: function(){
130
+ hasOpenModal: function () {
160
131
  for (var i = 0; i < this.stack.length; i++){
161
132
  if (this.stack[i].isShown) return true;
162
133
  }
134
+
163
135
  return false;
164
136
  },
165
137
 
@@ -170,20 +142,23 @@
170
142
  if (this.stack[i].isShown) topModal = this.stack[i];
171
143
  }
172
144
 
173
- topModal && topModal.$element.focus();
145
+ if (!topModal) return;
146
+
147
+ topModal.focus();
148
+
174
149
  },
175
150
 
176
- removeModal: function(modal){
151
+ removeModal: function (modal) {
177
152
  modal.$element.off('.modalmanager');
178
153
  if (modal.$backdrop) this.removeBackdrop.call(modal);
179
154
  this.stack.splice(this.getIndexOfModal(modal), 1);
180
155
  },
181
156
 
182
- getModalAt: function(index){
157
+ getModalAt: function (index) {
183
158
  return this.stack[index];
184
159
  },
185
160
 
186
- getIndexOfModal: function(modal){
161
+ getIndexOfModal: function (modal) {
187
162
  for (var i = 0; i < this.stack.length; i++){
188
163
  if (modal === this.stack[i]) return i;
189
164
  }
@@ -194,13 +169,13 @@
194
169
  modal.$backdrop = null;
195
170
  },
196
171
 
197
- createBackdrop: function(animate){
172
+ createBackdrop: function (animate) {
198
173
  var $backdrop;
199
174
 
200
175
  if (!this.isLoading) {
201
- $backdrop = $('<div class="modal-backdrop ' + animate + '" />')
202
- .appendTo(this.$parent)
203
- .toggleClass('modal-absolute', !this.isBody);
176
+ $backdrop = $('<div class="modal-backdrop ' + animate + '" />')
177
+ .appendTo(this.$element);
178
+
204
179
  } else {
205
180
  $backdrop = this.$loading;
206
181
  $backdrop.off('.modalmanager');
@@ -212,9 +187,37 @@
212
187
  return $backdrop
213
188
  },
214
189
 
190
+ removeContainer: function (modal) {
191
+ modal.$container.remove();
192
+ modal.$container = null;
193
+ },
194
+
195
+ createContainer: function (modal) {
196
+ var $container;
197
+
198
+ $container = $('<div class="modal-scrollable">')
199
+ .css('z-index', getzIndex( 'modal',
200
+ modal ? this.getIndexOfModal(modal) : this.stack.length ))
201
+ .appendTo(this.$element);
202
+
203
+ if (modal && modal.options.backdrop != 'static') {
204
+ $container.on('click.modal', targetIsSelf(function (e) {
205
+ modal.hide();
206
+ }));
207
+ } else if (modal) {
208
+ $container.on('click.modal', targetIsSelf(function (e) {
209
+ modal.attention();
210
+ }));
211
+ }
212
+
213
+ return $container;
214
+
215
+ },
216
+
215
217
  backdrop: function (modal, callback) {
216
218
  var animate = modal.$element.hasClass('fade') ? 'fade' : '',
217
- showBackdrop = $.extend({}, this.options, modal.options).backdrop;
219
+ showBackdrop = modal.options.backdrop &&
220
+ this.backdropCount < this.options.backdropLimit;
218
221
 
219
222
  if (modal.isShown && showBackdrop) {
220
223
  var doAnimate = $.support.transition && animate && !this.isLoading;
@@ -222,29 +225,27 @@
222
225
 
223
226
  modal.$backdrop = this.createBackdrop(animate);
224
227
 
225
- modal.$backdrop.css('z-index',
226
- (!this.isBody ? baseBackdropAbszIndex : baseBackdropzIndex)
227
- + (zIndexFactor * this.getIndexOfModal(modal)));
228
-
229
-
230
- if (modal.options.backdrop != 'static') {
231
- modal.$backdrop.on('click.modal', $.proxy(modal.hide, modal));
232
- }
228
+ modal.$backdrop.css('z-index', getzIndex( 'backdrop', this.getIndexOfModal(modal) ))
233
229
 
234
230
  if (doAnimate) modal.$backdrop[0].offsetWidth // force reflow
235
231
 
236
232
  modal.$backdrop.addClass('in')
237
233
 
234
+ this.backdropCount += 1;
235
+
238
236
  doAnimate ?
239
- modal.$backdrop.one($.support.transition.end, callback) :
240
- callback();
237
+ modal.$backdrop.one($.support.transition.end, callback) :
238
+ callback();
241
239
 
242
240
  } else if (!modal.isShown && modal.$backdrop) {
243
241
  modal.$backdrop.removeClass('in');
244
242
 
243
+ this.backdropCount -= 1;
244
+
245
245
  var that = this;
246
+
246
247
  $.support.transition && modal.$element.hasClass('fade')?
247
- modal.$backdrop.one($.support.transition.end, function(){ that.removeBackdrop(modal) }) :
248
+ modal.$backdrop.one($.support.transition.end, function () { that.removeBackdrop(modal) }) :
248
249
  that.removeBackdrop(modal);
249
250
 
250
251
  } else if (callback) {
@@ -252,16 +253,18 @@
252
253
  }
253
254
  },
254
255
 
255
- removeLoading: function(){
256
+ removeLoading: function () {
256
257
  this.$loading && this.$loading.remove();
257
258
  this.$loading = null;
258
259
  this.isLoading = false;
259
260
  },
260
261
 
261
- loading: function(callback){
262
- callback = callback || function(){ };
262
+ loading: function (callback) {
263
+ callback = callback || function () { };
263
264
 
264
- this.$element.toggleClass('modal-open', !this.isLoading || this.hasOpenModal());
265
+ this.$element
266
+ .toggleClass('modal-open', !this.isLoading || this.hasOpenModal())
267
+ .toggleClass('page-overflow', $(window).height() < this.$element.height());
265
268
 
266
269
  if (!this.isLoading) {
267
270
 
@@ -270,22 +273,18 @@
270
273
  this.$loading[0].offsetWidth // force reflow
271
274
 
272
275
  this.$loading
273
- .css('z-index',
274
- (!this.isBody ? baseBackdropAbszIndex : baseBackdropzIndex)
275
- + (zIndexFactor * this.stack.length))
276
- .on('click.modalmanager', $.proxy(this.loading, this))
276
+ .css('z-index', getzIndex('backdrop', this.stack.length))
277
277
  .addClass('in');
278
278
 
279
- var $scrollElement = (this.$container.length ? this.$container :
280
- (this.isBody ? $(window) : this.$element));
281
-
282
- this.$spinner = $('<div class="modal-spinner fade">')
283
- .append(this.options.spinner)
284
- .css('z-index', this.$loading.css('z-index'))
285
- .css('margin-top', $scrollElement.scrollTop())
286
- .appendTo(this.$parent)
279
+ var $spinner = $(this.options.spinner)
280
+ .css('z-index', getzIndex('modal', this.stack.length))
281
+ .appendTo(this.$element)
287
282
  .addClass('in');
288
283
 
284
+ this.$spinner = $(this.createContainer())
285
+ .append($spinner)
286
+ .on('click.modalmanager', $.proxy(this.loading, this));
287
+
289
288
  this.isLoading = true;
290
289
 
291
290
  $.support.transition ?
@@ -299,28 +298,51 @@
299
298
 
300
299
  var that = this;
301
300
  $.support.transition ?
302
- this.$loading.one($.support.transition.end, function(){ that.removeLoading() }) :
301
+ this.$loading.one($.support.transition.end, function () { that.removeLoading() }) :
303
302
  that.removeLoading();
304
303
 
305
304
  } else if (callback) {
306
305
  callback(this.isLoading);
307
306
  }
308
- },
309
-
310
- toggleLoading: function(callback){ this.loading(callback); }
307
+ }
311
308
  }
312
309
 
313
310
  /* PRIVATE METHODS
314
311
  * ======================= */
315
312
 
313
+ // computes and caches the zindexes
314
+ var getzIndex = (function () {
315
+ var zIndexFactor,
316
+ baseIndex = {};
317
+
318
+ return function (type, pos) {
319
+
320
+ if (typeof zIndexFactor === 'undefined'){
321
+ var $baseModal = $('<div class="modal hide" />').appendTo('body'),
322
+ $baseBackdrop = $('<div class="modal-backdrop hide" />').appendTo('body');
323
+
324
+ baseIndex['modal'] = +$baseModal.css('z-index'),
325
+ baseIndex['backdrop'] = +$baseBackdrop.css('z-index'),
326
+ zIndexFactor = baseIndex['modal'] - baseIndex['backdrop'];
327
+
328
+ $baseModal.remove();
329
+ $baseBackdrop.remove();
330
+ $baseBackdrop = $baseModal = null;
331
+ }
332
+
333
+ return baseIndex[type] + (zIndexFactor * pos);
334
+
335
+ }
336
+ }())
337
+
316
338
  // make sure the event target is the modal itself in order to prevent
317
339
  // other components such as tabsfrom triggering the modal manager.
318
340
  // if Boostsrap namespaced events, this would not be needed.
319
- function targetIsModal(callback){
320
- return function(e){
341
+ function targetIsSelf(callback){
342
+ return function (e) {
321
343
  if (this === e.target){
322
- callback.apply(this, arguments);
323
- }
344
+ return callback.apply(this, arguments);
345
+ }
324
346
  }
325
347
  }
326
348
 
@@ -330,24 +352,19 @@
330
352
 
331
353
  $.fn.modalmanager = function (option) {
332
354
  return this.each(function () {
333
- var $this = $(this)
334
- , data = $this.data('modalmanager');
355
+ var $this = $(this),
356
+ data = $this.data('modalmanager');
335
357
 
336
- if (!data) $this.data('modalmanager', (data = new ModalManager(this, options)))
337
- if (typeof option == 'string') data[option]()
358
+ if (!data) $this.data('modalmanager', (data = new ModalManager(this, option)))
359
+ if (typeof option === 'string') data[option]()
338
360
  })
339
361
  }
340
362
 
341
363
  $.fn.modalmanager.defaults = {
342
- backdrop: true,
343
- spinner: '<div class="loading-spinner" style="width: 200px; margin-left: -100px;"><div class="progress progress-striped active"><div class="bar" style="width: 100%;"></div></div></div>'
364
+ backdropLimit: 999,
365
+ spinner: '<div class="loading-spinner fade" style="width: 200px; margin-left: -100px;"><div class="progress progress-striped active"><div class="bar" style="width: 100%;"></div></div></div>'
344
366
  }
345
367
 
346
368
  $.fn.modalmanager.Constructor = ModalManager
347
369
 
348
- // Create a default global modal manager
349
- $(function(){
350
- window.GlobalModalManager = new ModalManager('body');
351
- })
352
-
353
370
  }(jQuery);
@@ -7,7 +7,7 @@
7
7
  *
8
8
  */
9
9
 
10
- .modal-open.has-modal-container {
10
+ .modal-open {
11
11
  position: relative; /* safari */
12
12
  overflow: hidden;
13
13
  }
@@ -17,7 +17,7 @@
17
17
  .modal-open.page-overflow .page-container,
18
18
  .modal-open.page-overflow .page-container .navbar-fixed-top,
19
19
  .modal-open.page-overflow .page-container .navbar-fixed-bottom,
20
- .modal-open.page-overflow .modal-container {
20
+ .modal-open.page-overflow .modal-scrollable {
21
21
  overflow-y: scroll;
22
22
  }
23
23
 
@@ -28,19 +28,14 @@
28
28
  }
29
29
  }
30
30
 
31
- .modal-container {
32
- display: none;
31
+
32
+ .modal-scrollable {
33
33
  position: fixed;
34
34
  top: 0;
35
35
  bottom: 0;
36
36
  left: 0;
37
37
  right: 0;
38
38
  overflow: auto;
39
- z-index: 9999;
40
- }
41
-
42
- .modal-open > .modal-container {
43
- display: block;
44
39
  }
45
40
 
46
41
  .modal {
@@ -83,12 +78,6 @@
83
78
  border-radius: 6px;
84
79
  }
85
80
 
86
- .modal-spinner {
87
- position: absolute;
88
- top: 50%;
89
- left: 50%;
90
- }
91
-
92
81
  .modal-backdrop.modal-absolute{
93
82
  position: absolute;
94
83
  z-index: 940;
@@ -110,7 +99,6 @@
110
99
 
111
100
  .modal-overflow.modal {
112
101
  top: 1%;
113
- /*bottom: 1%;*/
114
102
  }
115
103
 
116
104
  .modal-overflow.modal.fade {
@@ -119,7 +107,6 @@
119
107
 
120
108
  .modal-overflow.modal.fade.in {
121
109
  top: 1%;
122
- /*bottom: 1%;*/
123
110
  }
124
111
 
125
112
  .modal-overflow .modal-body {
@@ -127,25 +114,6 @@
127
114
  -webkit-overflow-scrolling: touch;
128
115
  }
129
116
 
130
- /*.modal-overflow .modal-body {
131
- position: absolute;
132
- top: 0;
133
- bottom: 0;
134
- right: 0;
135
- left: 0;
136
- margin-top: 48px; // header height
137
- margin-bottom: 60px; // footer height
138
- overflow: auto;
139
- }
140
-
141
-
142
- .modal-overflow .modal-footer {
143
- position: absolute;
144
- bottom: 0;
145
- right: 0;
146
- left: 0;
147
- }*/
148
-
149
117
  /* Responsive */
150
118
 
151
119
  @media (min-width: 1200px) {
@@ -197,3 +165,51 @@
197
165
  left: 50%;
198
166
  margin: -12px 0 0 -12px;
199
167
  }
168
+
169
+ /*
170
+ Animate.css - http://daneden.me/animate
171
+ Licensed under the ☺ license (http://licence.visualidiot.com/)
172
+
173
+ Copyright (c) 2012 Dan Eden*/
174
+
175
+ .animated {
176
+ -webkit-animation-duration: 1s;
177
+ -moz-animation-duration: 1s;
178
+ -o-animation-duration: 1s;
179
+ animation-duration: 1s;
180
+ -webkit-animation-fill-mode: both;
181
+ -moz-animation-fill-mode: both;
182
+ -o-animation-fill-mode: both;
183
+ animation-fill-mode: both;
184
+ }
185
+
186
+ @-webkit-keyframes shake {
187
+ 0%, 100% {-webkit-transform: translateX(0);}
188
+ 10%, 30%, 50%, 70%, 90% {-webkit-transform: translateX(-10px);}
189
+ 20%, 40%, 60%, 80% {-webkit-transform: translateX(10px);}
190
+ }
191
+
192
+ @-moz-keyframes shake {
193
+ 0%, 100% {-moz-transform: translateX(0);}
194
+ 10%, 30%, 50%, 70%, 90% {-moz-transform: translateX(-10px);}
195
+ 20%, 40%, 60%, 80% {-moz-transform: translateX(10px);}
196
+ }
197
+
198
+ @-o-keyframes shake {
199
+ 0%, 100% {-o-transform: translateX(0);}
200
+ 10%, 30%, 50%, 70%, 90% {-o-transform: translateX(-10px);}
201
+ 20%, 40%, 60%, 80% {-o-transform: translateX(10px);}
202
+ }
203
+
204
+ @keyframes shake {
205
+ 0%, 100% {transform: translateX(0);}
206
+ 10%, 30%, 50%, 70%, 90% {transform: translateX(-10px);}
207
+ 20%, 40%, 60%, 80% {transform: translateX(10px);}
208
+ }
209
+
210
+ .shake {
211
+ -webkit-animation-name: shake;
212
+ -moz-animation-name: shake;
213
+ -o-animation-name: shake;
214
+ animation-name: shake;
215
+ }
@@ -3,7 +3,7 @@
3
3
  <%- alert_class = type == :notice ? 'info' : type %>
4
4
  <% if flash[type] %>
5
5
  <div class="alert alert-<%=alert_class%>"><%= flash[type] %>
6
- <a class="close" data-dismiss="alert" href="#">x</a>
6
+ <a class="close" data-dismiss="alert" href="#">&times;</a>
7
7
  </div>
8
8
  <% end %>
9
9
  <% end %>
@@ -26,8 +26,7 @@
26
26
  %>
27
27
  <%= link_to(accessible_remove_label.html_safe,
28
28
  options[:remove],
29
- :class=>'btnRemove imgReplace',
30
- :alt=>'remove'
29
+ :class=>'btnRemove imgReplace'
31
30
  ) %>
32
31
  <%- end -%>
33
32
  </span>
@@ -1,5 +1,5 @@
1
1
  <% if @response.total <= spell_check_max and @response.spelling.words.size > 0 %>
2
2
  <div id="spell">
3
- <h4 class="suggest"><i><%= t('blacklight.did_you_mean', :options => @response.spelling.words.map { |word| link_to_query(word) }.join(" #{t('blacklight.or')} ")).html_safe %></i></h4>
3
+ <h4 class="suggest"><em><%= t('blacklight.did_you_mean', :options => @response.spelling.words.map { |word| link_to_query(word) }.join(" #{t('blacklight.or')} ")).html_safe %></em></h4>
4
4
  </div>
5
5
  <% end %>
@@ -1,6 +1,6 @@
1
1
  <% if paginate_params(@response).num_pages > 1 %>
2
2
  <div class="row record-padding">
3
- <div class="span8 offset1">
3
+ <div class="span9">
4
4
  <div class="pagination">
5
5
  <%= paginate_rsolr_response @response, :outer_window => 2, :theme => 'blacklight' %>
6
6
  </div>
@@ -15,7 +15,7 @@
15
15
  </li>
16
16
  <% if (@document.respond_to?(:export_as_mla_citation_txt) || @document.respond_to?(:export_as_apa_citation_txt)) %>
17
17
  <li class="cite">
18
- <%= link_to t('blacklight.tools.cite'), citation_catalog_path(:id => @document), {:id => 'citeLink', :name => 'citation', :class => 'lightboxLink'} %>
18
+ <%= link_to t('blacklight.tools.cite'), citation_catalog_path(:id => @document), {:id => 'citeLink', :class => 'lightboxLink'} %>
19
19
  </li>
20
20
  <% end %>
21
21
  <% if @document.export_formats.keys.include?( :refworks_marc_txt ) %>
@@ -30,18 +30,18 @@
30
30
  <% end %>
31
31
  <% if @document.respond_to?( :to_email_text ) %>
32
32
  <li class="email">
33
- <%= link_to t('blacklight.tools.email'), email_catalog_path(:id => @document), {:id => 'emailLink', :name => 'email', :class => 'lightboxLink'} %>
33
+ <%= link_to t('blacklight.tools.email'), email_catalog_path(:id => @document), {:id => 'emailLink', :class => 'lightboxLink'} %>
34
34
  </li>
35
35
  <%- end -%>
36
36
  <%- if @document.respond_to?( :to_sms_text ) -%>
37
37
  <li class="sms">
38
- <%= link_to t('blacklight.tools.sms'), sms_catalog_path(:id => @document), {:id => 'smsLink', :name => 'sms', :class => 'lightboxLink'} %>
38
+ <%= link_to t('blacklight.tools.sms'), sms_catalog_path(:id => @document), {:id => 'smsLink', :class => 'lightboxLink'} %>
39
39
  </li>
40
40
  <%- end -%>
41
41
 
42
42
  <% if @document.respond_to?(:to_marc) %>
43
43
  <li class="librarian_view">
44
- <%= link_to t('blacklight.tools.librarian_view'), librarian_view_catalog_path(@document), {:id => 'librarianLink', :name => 'librarian_view', :class => 'lightboxLink'} %>
44
+ <%= link_to t('blacklight.tools.librarian_view'), librarian_view_catalog_path(@document), {:id => 'librarianLink', :class => 'lightboxLink'} %>
45
45
  </li>
46
46
  <% end %>
47
- </ul>
47
+ </ul>
@@ -2,14 +2,16 @@
2
2
  <html lang="en">
3
3
  <head>
4
4
  <meta charset="utf-8">
5
- <meta http-equiv="Content-Type" content="text/html" charset="utf-8">
5
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
6
6
 
7
7
  <!-- Mobile viewport optimization h5bp.com/ad -->
8
8
  <meta name="HandheldFriendly" content="True">
9
9
  <meta name="viewport" content="width=device-width,initial-scale=1.0">
10
10
 
11
11
  <!-- Mobile IE allows us to activate ClearType technology for smoothing fonts for easy reading -->
12
- <meta http-equiv="cleartype" content="on">
12
+ <!--[if IEMobile]>
13
+ <meta http-equiv="cleartype" content="on">
14
+ <![endif]-->
13
15
 
14
16
  <title><%= h(@page_title || application_name) %></title>
15
17
  <link href="<%= opensearch_catalog_path(:format => 'xml', :only_path => false) %>" title="<%= application_name%>" type="application/opensearchdescription+xml" rel="search"/>
@@ -40,7 +42,7 @@
40
42
  </div>
41
43
  <!-- /Top bar -->
42
44
  <div class="row">
43
- <div class="span10">
45
+ <div class="span12">
44
46
  <div id="main-flashes">
45
47
  <%= render :partial=>'/flash_msg' %>
46
48
  </div>
@@ -28,6 +28,6 @@ Gem::Specification.new do |s|
28
28
  s.add_dependency "rsolr", "~> 1.0.6" # Library for interacting with rSolr.
29
29
  s.add_dependency "kaminari", "~> 0.13" # the pagination (page 1,2,3, etc..) of our search results
30
30
  s.add_dependency "sass-rails"
31
- s.add_dependency "bootstrap-sass", "~> 2.1.0"
31
+ s.add_dependency "bootstrap-sass", "~> 2.2.0"
32
32
  s.add_development_dependency "jettywrapper", ">= 1.2.0"
33
33
  end
@@ -182,13 +182,13 @@ en:
182
182
  title: 'Results navigation'
183
183
  pagination_info:
184
184
  no_items_found: 'No %{entry_name} found'
185
- single_item_found: '<b>1</b> to <b>1</b> of <b>1</b>'
185
+ single_item_found: '<strong>1</strong> to <strong>1</strong> of <strong>1</strong>'
186
186
  pages:
187
- one: '<b>%{start_num}</b> - <b>%{end_num}</b> of <b>%{total_num}</b>'
188
- other: '<b>%{start_num}</b> - <b>%{end_num}</b> of <b>%{total_num}</b>'
187
+ one: '<strong>%{start_num}</strong> - <strong>%{end_num}</strong> of <strong>%{total_num}</strong>'
188
+ other: '<strong>%{start_num}</strong> - <strong>%{end_num}</strong> of <strong>%{total_num}</strong>'
189
189
  entry_pagination_info:
190
- one: '<b>1 of 1</b>'
191
- other: '<b>%{current}</b> of <b>%{total}</b>'
190
+ one: '<strong>1 of 1</strong>'
191
+ other: '<strong>%{current}</strong> of <strong>%{total}</strong>'
192
192
  documents:
193
193
  counter: '%{counter}. '
194
194
  facets:
@@ -95,12 +95,16 @@ module Blacklight::Catalog
95
95
  # citation action
96
96
  def citation
97
97
  @response, @documents = get_solr_response_for_field_values(SolrDocument.unique_key,params[:id])
98
+ respond_to do |format|
99
+ format.html
100
+ format.js { render :layout => false }
101
+ end
98
102
  end
99
103
  # grabs a bunch of documents to export to endnote
100
104
  def endnote
101
105
  @response, @documents = get_solr_response_for_field_values(SolrDocument.unique_key,params[:id])
102
106
  respond_to do |format|
103
- format.endnote :layout => false
107
+ format.endnote { render :layout => false }
104
108
  end
105
109
  end
106
110
 
@@ -83,7 +83,7 @@ end
83
83
  platforms :ruby do
84
84
  gem 'sqlite3'
85
85
  gem 'execjs'
86
- gem 'therubyracer'
86
+ gem 'therubyracer', '~> 0.10.2'
87
87
  end
88
88
 
89
89
  gem 'blacklight', :path => '../../'
@@ -83,7 +83,7 @@ end
83
83
  platforms :ruby do
84
84
  gem 'sqlite3'
85
85
  gem 'execjs'
86
- gem 'therubyracer'
86
+ gem 'therubyracer', '~> 0.10.2'
87
87
  end
88
88
 
89
89
  gem 'blacklight', :path => '../../'
@@ -43,7 +43,7 @@ describe CatalogHelper do
43
43
  @response = mock_response :total => 1
44
44
 
45
45
  html = render_pagination_info(@response, { :entry_name => 'entry_name' })
46
- html.should == "<b>1</b> to <b>1</b> of <b>1</b>"
46
+ html.should == "<strong>1</strong> to <strong>1</strong> of <strong>1</strong>"
47
47
  html.html_safe?.should == true
48
48
  end
49
49
 
@@ -51,7 +51,7 @@ describe CatalogHelper do
51
51
  @response = mock_response :total => 7
52
52
 
53
53
  html = render_pagination_info(@response, { :entry_name => 'entry_name' })
54
- html.should == "<b>1</b> - <b>7</b> of <b>7</b>"
54
+ html.should == "<strong>1</strong> - <strong>7</strong> of <strong>7</strong>"
55
55
  html.html_safe?.should == true
56
56
  end
57
57
 
@@ -59,7 +59,7 @@ describe CatalogHelper do
59
59
  @response = mock_response :total => 15, :per_page => 10
60
60
 
61
61
  html = render_pagination_info(@response, { :entry_name => 'entry_name' })
62
- html.should == "<b>1</b> - <b>10</b> of <b>15</b>"
62
+ html.should == "<strong>1</strong> - <strong>10</strong> of <strong>15</strong>"
63
63
  html.html_safe?.should == true
64
64
  end
65
65
 
@@ -67,7 +67,7 @@ describe CatalogHelper do
67
67
  @response = mock_response :total => 47, :per_page => 10, :current_page => 2
68
68
 
69
69
  html = render_pagination_info(@response, { :entry_name => 'entry_name' })
70
- html.should == "<b>11</b> - <b>20</b> of <b>47</b>"
70
+ html.should == "<strong>11</strong> - <strong>20</strong> of <strong>47</strong>"
71
71
  html.html_safe?.should == true
72
72
  end
73
73
 
@@ -75,7 +75,7 @@ describe CatalogHelper do
75
75
  @response = mock_response :total => 47, :per_page => 10, :current_page => 5
76
76
 
77
77
  html = render_pagination_info(@response, { :entry_name => 'entry_name' })
78
- html.should == "<b>41</b> - <b>47</b> of <b>47</b>"
78
+ html.should == "<strong>41</strong> - <strong>47</strong> of <strong>47</strong>"
79
79
  html.html_safe?.should == true
80
80
  end
81
81
 
metadata CHANGED
@@ -1,8 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: blacklight
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.0.0
5
- prerelease:
4
+ version: 4.0.1
6
5
  platform: ruby
7
6
  authors:
8
7
  - Jonathan Rochkind
@@ -17,12 +16,11 @@ authors:
17
16
  autorequire:
18
17
  bindir: bin
19
18
  cert_chain: []
20
- date: 2012-11-30 00:00:00.000000000 Z
19
+ date: 2012-12-11 00:00:00.000000000 Z
21
20
  dependencies:
22
21
  - !ruby/object:Gem::Dependency
23
22
  name: rails
24
23
  requirement: !ruby/object:Gem::Requirement
25
- none: false
26
24
  requirements:
27
25
  - - ~>
28
26
  - !ruby/object:Gem::Version
@@ -30,7 +28,6 @@ dependencies:
30
28
  type: :runtime
31
29
  prerelease: false
32
30
  version_requirements: !ruby/object:Gem::Requirement
33
- none: false
34
31
  requirements:
35
32
  - - ~>
36
33
  - !ruby/object:Gem::Version
@@ -38,7 +35,6 @@ dependencies:
38
35
  - !ruby/object:Gem::Dependency
39
36
  name: nokogiri
40
37
  requirement: !ruby/object:Gem::Requirement
41
- none: false
42
38
  requirements:
43
39
  - - ~>
44
40
  - !ruby/object:Gem::Version
@@ -46,7 +42,6 @@ dependencies:
46
42
  type: :runtime
47
43
  prerelease: false
48
44
  version_requirements: !ruby/object:Gem::Requirement
49
- none: false
50
45
  requirements:
51
46
  - - ~>
52
47
  - !ruby/object:Gem::Version
@@ -54,7 +49,6 @@ dependencies:
54
49
  - !ruby/object:Gem::Dependency
55
50
  name: marc
56
51
  requirement: !ruby/object:Gem::Requirement
57
- none: false
58
52
  requirements:
59
53
  - - ! '>='
60
54
  - !ruby/object:Gem::Version
@@ -65,7 +59,6 @@ dependencies:
65
59
  type: :runtime
66
60
  prerelease: false
67
61
  version_requirements: !ruby/object:Gem::Requirement
68
- none: false
69
62
  requirements:
70
63
  - - ! '>='
71
64
  - !ruby/object:Gem::Version
@@ -76,7 +69,6 @@ dependencies:
76
69
  - !ruby/object:Gem::Dependency
77
70
  name: rsolr
78
71
  requirement: !ruby/object:Gem::Requirement
79
- none: false
80
72
  requirements:
81
73
  - - ~>
82
74
  - !ruby/object:Gem::Version
@@ -84,7 +76,6 @@ dependencies:
84
76
  type: :runtime
85
77
  prerelease: false
86
78
  version_requirements: !ruby/object:Gem::Requirement
87
- none: false
88
79
  requirements:
89
80
  - - ~>
90
81
  - !ruby/object:Gem::Version
@@ -92,7 +83,6 @@ dependencies:
92
83
  - !ruby/object:Gem::Dependency
93
84
  name: kaminari
94
85
  requirement: !ruby/object:Gem::Requirement
95
- none: false
96
86
  requirements:
97
87
  - - ~>
98
88
  - !ruby/object:Gem::Version
@@ -100,7 +90,6 @@ dependencies:
100
90
  type: :runtime
101
91
  prerelease: false
102
92
  version_requirements: !ruby/object:Gem::Requirement
103
- none: false
104
93
  requirements:
105
94
  - - ~>
106
95
  - !ruby/object:Gem::Version
@@ -108,7 +97,6 @@ dependencies:
108
97
  - !ruby/object:Gem::Dependency
109
98
  name: sass-rails
110
99
  requirement: !ruby/object:Gem::Requirement
111
- none: false
112
100
  requirements:
113
101
  - - ! '>='
114
102
  - !ruby/object:Gem::Version
@@ -116,7 +104,6 @@ dependencies:
116
104
  type: :runtime
117
105
  prerelease: false
118
106
  version_requirements: !ruby/object:Gem::Requirement
119
- none: false
120
107
  requirements:
121
108
  - - ! '>='
122
109
  - !ruby/object:Gem::Version
@@ -124,23 +111,20 @@ dependencies:
124
111
  - !ruby/object:Gem::Dependency
125
112
  name: bootstrap-sass
126
113
  requirement: !ruby/object:Gem::Requirement
127
- none: false
128
114
  requirements:
129
115
  - - ~>
130
116
  - !ruby/object:Gem::Version
131
- version: 2.1.0
117
+ version: 2.2.0
132
118
  type: :runtime
133
119
  prerelease: false
134
120
  version_requirements: !ruby/object:Gem::Requirement
135
- none: false
136
121
  requirements:
137
122
  - - ~>
138
123
  - !ruby/object:Gem::Version
139
- version: 2.1.0
124
+ version: 2.2.0
140
125
  - !ruby/object:Gem::Dependency
141
126
  name: jettywrapper
142
127
  requirement: !ruby/object:Gem::Requirement
143
- none: false
144
128
  requirements:
145
129
  - - ! '>='
146
130
  - !ruby/object:Gem::Version
@@ -148,7 +132,6 @@ dependencies:
148
132
  type: :development
149
133
  prerelease: false
150
134
  version_requirements: !ruby/object:Gem::Requirement
151
- none: false
152
135
  requirements:
153
136
  - - ! '>='
154
137
  - !ruby/object:Gem::Version
@@ -454,33 +437,27 @@ files:
454
437
  - test_support/spec/views/catalog/index.atom.builder_spec.rb
455
438
  homepage: http://projectblacklight.org/
456
439
  licenses: []
440
+ metadata: {}
457
441
  post_install_message:
458
442
  rdoc_options: []
459
443
  require_paths:
460
444
  - lib
461
445
  required_ruby_version: !ruby/object:Gem::Requirement
462
- none: false
463
446
  requirements:
464
447
  - - ! '>='
465
448
  - !ruby/object:Gem::Version
466
449
  version: '0'
467
- segments:
468
- - 0
469
- hash: 2075279285300653487
470
450
  required_rubygems_version: !ruby/object:Gem::Requirement
471
- none: false
472
451
  requirements:
473
452
  - - ! '>='
474
453
  - !ruby/object:Gem::Version
475
454
  version: '0'
476
- segments:
477
- - 0
478
- hash: 2075279285300653487
479
455
  requirements: []
480
456
  rubyforge_project: blacklight
481
- rubygems_version: 1.8.23
457
+ rubygems_version: 2.0.0.preview2
482
458
  signing_key:
483
- specification_version: 3
459
+ specification_version: 4
484
460
  summary: Blacklight provides a discovery interface for any Solr (http://lucene.apache.org/solr)
485
461
  index.
486
462
  test_files: []
463
+ has_rdoc: