hydra-batch-edit 0.0.6 → 0.0.7
Sign up to get free protection for your applications and to get access to all the features.
- data/Rakefile +2 -2
- data/app/helpers/batch_edit_helper.rb +9 -4
- data/app/views/batch_edits/_add_button.html.erb +5 -3
- data/app/views/batch_edits/_check_all.html.erb +1 -1
- data/app/views/batch_edits/_delete_batch.html.erb +1 -0
- data/app/views/batch_edits/_next_page.html.erb +1 -1
- data/lib/hydra/batch_edit/routes.rb +1 -0
- data/lib/hydra/batch_edit/version.rb +1 -1
- data/lib/hydra/batch_edit_behavior.rb +121 -86
- data/spec/controllers/batch_edits_controller_spec.rb +65 -1
- data/spec/routing/batch_edit_routes_spec.rb +3 -0
- data/spec/support/Gemfile +2 -2
- data/spec/support/app/models/sample.rb +4 -0
- data/vendor/assets/javascripts/batch_edit.js.coffee +84 -3
- metadata +3 -2
data/Rakefile
CHANGED
@@ -13,7 +13,7 @@ RSpec::Core::RakeTask.new(:spec => :generate) do |t|
|
|
13
13
|
end
|
14
14
|
|
15
15
|
|
16
|
-
|
16
|
+
desc "Create the test rails app"
|
17
17
|
task :generate do
|
18
18
|
unless File.exists?('spec/internal/Rakefile')
|
19
19
|
puts "Generating rails app"
|
@@ -36,7 +36,7 @@ task :generate do
|
|
36
36
|
puts "Running specs"
|
37
37
|
end
|
38
38
|
|
39
|
-
|
39
|
+
desc "Clean out the test rails app"
|
40
40
|
task :clean do
|
41
41
|
puts "Removing sample rails app"
|
42
42
|
`rm -rf spec/internal`
|
@@ -17,8 +17,8 @@ module BatchEditHelper
|
|
17
17
|
end
|
18
18
|
|
19
19
|
# Displays the button that users click when they are done selecting items for a batch. Put this in your search result page template. We put it in catalog/index.html
|
20
|
-
def batch_edit_continue
|
21
|
-
render :partial => '/batch_edits/next_page'
|
20
|
+
def batch_edit_continue(label = 'Update Selected')
|
21
|
+
render :partial => '/batch_edits/next_page', :locals=>{:label=>label}
|
22
22
|
end
|
23
23
|
|
24
24
|
# Displays the button to select/deselect items for your batch. Call this in the index partial that's rendered for each search result.
|
@@ -28,7 +28,12 @@ module BatchEditHelper
|
|
28
28
|
end
|
29
29
|
|
30
30
|
# Displays the check all button to select/deselect items for your batch. Put this in your search result page template. We put it in catalog/index.html
|
31
|
-
def batch_check_all
|
32
|
-
render :partial=>'/batch_edits/check_all'
|
31
|
+
def batch_check_all(label = 'Use all results')
|
32
|
+
render :partial=>'/batch_edits/check_all', :locals=>{:label=>label}
|
33
|
+
end
|
34
|
+
|
35
|
+
# Displays the button that users click when they are done selecting items for a batch to Remove those items from the repository. Put this in your search result page template. We put it in catalog/index.html
|
36
|
+
def batch_edit_delete_batch(label = 'Delete Selected', confirm = 'Are you sure?')
|
37
|
+
render :partial => '/batch_edits/delete_batch', :locals=>{:label=>label, :confirm=>confirm}
|
33
38
|
end
|
34
39
|
end
|
@@ -4,17 +4,19 @@
|
|
4
4
|
<%-
|
5
5
|
# pass in local :document with a SolrDocument
|
6
6
|
if item_in_batch?(document.id)
|
7
|
-
method =
|
7
|
+
method = :delete
|
8
8
|
label = 'remove from batch'
|
9
9
|
cssClass = "deleteBatch"
|
10
|
+
action = "destroy"
|
10
11
|
else
|
11
|
-
method =
|
12
|
+
method = :put
|
12
13
|
label = 'add to batch'
|
13
14
|
cssClass = "addBatch"
|
15
|
+
action = "add"
|
14
16
|
end
|
15
17
|
-%>
|
16
18
|
|
17
|
-
<%= form_tag(
|
19
|
+
<%= form_tag({:controller => "batch_edits", :action => action, :id => document.id}, :method => method, :class=> "batch_toggle #{cssClass}", "data-doc-id" => document.id, "data-behavior" => 'batch-add-form', :title=>h(document[document_show_link_field])) do -%>
|
18
20
|
<%= hidden_field(:bookmark, :title, :value => document[document_show_link_field]) %>
|
19
21
|
<%= submit_tag(label, :class=>"batch_submit", :id => "batch_submit_#{document.id}") %>
|
20
22
|
<% end %>
|
@@ -1,4 +1,4 @@
|
|
1
1
|
<%= form_tag(all_batch_edits_path, :method => :put, :class=> "batch-select-all hidden", "data-behavior" => 'batch-select-all') do -%>
|
2
|
-
<%= submit_tag(
|
2
|
+
<%= submit_tag(label, :class=>'batch-all-button btn') %>
|
3
3
|
<% end %>
|
4
4
|
|
@@ -0,0 +1 @@
|
|
1
|
+
<%= button_to label, batch_edit, :confirm => confirm, :method=>:delete, :class=>"btn btn-primary btn-delete hidden", 'data-behavior'=>'batch-edit', :id=>'batch-edit-delete' %>
|
@@ -1 +1 @@
|
|
1
|
-
<%= button_to
|
1
|
+
<%= button_to label, edit_batch_edits_path, :method=>:get, :class=>"btn btn-update btn-primary hidden", 'data-behavior'=>'batch-edit', :id=>'batch-edit' %>
|
@@ -1,112 +1,147 @@
|
|
1
|
-
module Hydra
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
1
|
+
module Hydra
|
2
|
+
module BatchEditBehavior
|
3
|
+
extend ActiveSupport::Concern
|
4
|
+
|
5
|
+
included do
|
6
|
+
before_filter :filter_docs_with_access!, :only=>[:edit, :update, :destroy_collection]
|
7
|
+
before_filter :check_for_empty!, :only=>[:edit, :update, :destroy_collection]
|
8
|
+
end
|
8
9
|
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
10
|
+
|
11
|
+
# fetch the documents that match the ids in the folder
|
12
|
+
def index
|
13
|
+
@response, @documents = get_solr_response_for_field_values("id", batch)
|
14
|
+
end
|
14
15
|
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
16
|
+
def state
|
17
|
+
session[:batch_edit_state] = params[:state]
|
18
|
+
render :json => {"OK" => "OK"}
|
19
|
+
end
|
19
20
|
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
21
|
+
# add a document_id to the batch. :id of action is solr doc id
|
22
|
+
def add
|
23
|
+
id = params[:id]
|
24
|
+
raise "Too many items in batch!" if ((batch.to_s.length+id.to_s.length) > 2200) # we are going to overflow our cookie
|
25
|
+
batch << id if ! batch.include? id
|
26
|
+
respond_to do |format|
|
27
|
+
format.html do
|
28
|
+
redirect_to :back, :notice => "#{params[:title] || "Item"} successfully added to batch"
|
29
|
+
end
|
30
|
+
format.js { render :json => batch }
|
26
31
|
end
|
27
|
-
format.js { render :json => batch }
|
28
32
|
end
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
33
|
+
|
34
|
+
# remove a document_id from the batch. :id of action is solr_doc_id
|
35
|
+
def destroy
|
36
|
+
batch.delete(params[:id])
|
37
|
+
respond_to do |format|
|
38
|
+
format.html do
|
39
|
+
redirect_to :back, :notice => "#{params[:title] || "Item"} successfully removed from batch"
|
40
|
+
end
|
41
|
+
format.js do
|
42
|
+
render :json => {"OK" => "OK"}
|
43
|
+
end
|
37
44
|
end
|
38
|
-
|
39
|
-
|
45
|
+
|
46
|
+
end
|
47
|
+
|
48
|
+
# get rid of the items in the batch
|
49
|
+
def clear
|
50
|
+
clear_batch!
|
51
|
+
respond_to do |format|
|
52
|
+
format.html { redirect_to :back, :notice=> "Batch has been cleared" }
|
53
|
+
format.js { render :json => batch }
|
40
54
|
end
|
41
55
|
end
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
# get rid of the items in the batch
|
46
|
-
def clear
|
47
|
-
clear_batch!
|
48
|
-
respond_to do |format|
|
49
|
-
format.html { redirect_to :back, :notice=> "Batch has been cleared" }
|
50
|
-
format.js { render :json => batch }
|
56
|
+
|
57
|
+
def edit
|
51
58
|
end
|
52
|
-
end
|
53
59
|
|
54
|
-
|
55
|
-
|
60
|
+
#pulled out to allow a user to override the default redirect
|
61
|
+
def after_update
|
62
|
+
redirect_to catalog_index_path
|
63
|
+
end
|
64
|
+
|
65
|
+
#called before the save of the document on update to do addition processes on the document beyond update_attributes
|
66
|
+
def update_document(obj)
|
67
|
+
type = obj.class.to_s.underscore.to_sym
|
68
|
+
obj.update_attributes(params[type].reject{|k, v| v.blank?})
|
69
|
+
end
|
56
70
|
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
71
|
+
def update
|
72
|
+
batch.each do |doc_id|
|
73
|
+
obj = ActiveFedora::Base.find(doc_id, :cast=>true)
|
74
|
+
update_document(obj)
|
75
|
+
obj.save
|
76
|
+
end
|
77
|
+
flash[:notice] = "Batch update complete"
|
78
|
+
clear_batch!
|
79
|
+
after_update
|
80
|
+
end
|
81
|
+
|
82
|
+
def all
|
83
|
+
self.batch = Hydra::BatchEdit::SearchService.new(session, current_user.user_key).last_search_documents.map(&:id)
|
84
|
+
respond_to do |format|
|
85
|
+
format.html { redirect_to edit_batch_edits_path }
|
86
|
+
format.js { render :json => batch }
|
87
|
+
end
|
63
88
|
end
|
64
|
-
flash[:notice] = "Batch update complete"
|
65
|
-
clear_batch!
|
66
|
-
redirect_to catalog_index_path
|
67
89
|
|
68
|
-
|
90
|
+
#pulled out to allow a user to override the default redirect
|
91
|
+
def after_destroy_collection
|
92
|
+
redirect_to catalog_index_path
|
93
|
+
end
|
69
94
|
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
95
|
+
def destroy_collection
|
96
|
+
batch.each do |doc_id|
|
97
|
+
obj = ActiveFedora::Base.find(doc_id, :cast=>true)
|
98
|
+
obj.destroy
|
99
|
+
end
|
100
|
+
flash[:notice] = "Batch delete complete"
|
101
|
+
clear_batch!
|
102
|
+
after_destroy_collection
|
103
|
+
end
|
74
104
|
|
75
|
-
|
105
|
+
def check_for_empty?
|
106
|
+
return batch.empty?
|
107
|
+
end
|
76
108
|
|
77
|
-
|
78
|
-
session[:batch_document_ids] ||= []
|
79
|
-
end
|
109
|
+
protected
|
80
110
|
|
81
|
-
|
82
|
-
|
83
|
-
|
111
|
+
def batch
|
112
|
+
session[:batch_document_ids] ||= []
|
113
|
+
end
|
84
114
|
|
115
|
+
def batch=(val)
|
116
|
+
session[:batch_document_ids] = val
|
117
|
+
end
|
85
118
|
|
86
|
-
def clear_batch!
|
87
|
-
self.batch = []
|
88
|
-
end
|
89
119
|
|
90
|
-
|
91
|
-
|
92
|
-
redirect_to :back
|
93
|
-
return false
|
120
|
+
def clear_batch!
|
121
|
+
self.batch = []
|
94
122
|
end
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
123
|
+
|
124
|
+
def check_for_empty!
|
125
|
+
if batch.empty?
|
126
|
+
redirect_to :back
|
127
|
+
return false
|
128
|
+
end
|
129
|
+
end
|
130
|
+
|
131
|
+
def filter_docs_with_access!
|
132
|
+
no_permissions = []
|
133
|
+
if batch.empty?
|
134
|
+
flash[:notice] = "Select something first"
|
135
|
+
else
|
136
|
+
batch.dup.each do |doc_id|
|
137
|
+
unless can?(:edit, doc_id)
|
138
|
+
session[:batch_document_ids].delete(doc_id)
|
139
|
+
no_permissions << doc_id
|
140
|
+
end
|
106
141
|
end
|
142
|
+
flash[:notice] = "You do not have permission to edit the documents: #{no_permissions.join(', ')}" unless no_permissions.empty?
|
107
143
|
end
|
108
|
-
flash[:notice] = "You do not have permission to edit the documents: #{no_permissions.join(', ')}" unless no_permissions.empty?
|
109
144
|
end
|
145
|
+
|
110
146
|
end
|
111
|
-
|
112
147
|
end
|
@@ -9,7 +9,15 @@ describe BatchEditsController do
|
|
9
9
|
before(:each) do
|
10
10
|
request.env["HTTP_REFERER"] = "/"
|
11
11
|
end
|
12
|
-
|
12
|
+
it "should respond to after_update" do
|
13
|
+
controller.respond_to? "after_update"
|
14
|
+
end
|
15
|
+
it "should respond to update_document" do
|
16
|
+
controller.respond_to? "update_document"
|
17
|
+
end
|
18
|
+
it "should respond to after_delete" do
|
19
|
+
controller.respond_to? "after_delete"
|
20
|
+
end
|
13
21
|
it "should add items to list" do
|
14
22
|
@mock_response = mock()
|
15
23
|
@mock_document = mock()
|
@@ -48,6 +56,14 @@ describe BatchEditsController do
|
|
48
56
|
xhr :put, :add, :id => "77826928"
|
49
57
|
flash[:notice].should == nil
|
50
58
|
end
|
59
|
+
|
60
|
+
it "should check for empty" do
|
61
|
+
put :add, :id =>"77826928"
|
62
|
+
put :add, :id => "94120425"
|
63
|
+
controller.check_for_empty?.should == false
|
64
|
+
put :clear
|
65
|
+
controller.check_for_empty?.should == true
|
66
|
+
end
|
51
67
|
|
52
68
|
describe "edit" do
|
53
69
|
before do
|
@@ -119,6 +135,49 @@ describe BatchEditsController do
|
|
119
135
|
end
|
120
136
|
end
|
121
137
|
|
138
|
+
describe "delete_collection" do
|
139
|
+
before :all do
|
140
|
+
@one = Sample.create
|
141
|
+
@two = Sample.create
|
142
|
+
end
|
143
|
+
before do
|
144
|
+
controller.stub(:catalog_index_path).and_return('/catalog')
|
145
|
+
request.env["HTTP_REFERER"] = "where_i_came_from"
|
146
|
+
end
|
147
|
+
it "should complain when none are in the batch " do
|
148
|
+
delete :destroy_collection
|
149
|
+
response.should redirect_to 'where_i_came_from'
|
150
|
+
flash[:notice].should == "Select something first"
|
151
|
+
end
|
152
|
+
it "should not update when the user doesn't have permissions" do
|
153
|
+
put :add, :id =>@one.pid
|
154
|
+
put :add, :id => @two.pid
|
155
|
+
controller.should_receive(:can?).with(:edit, @one.pid).and_return(false)
|
156
|
+
controller.should_receive(:can?).with(:edit, @two.pid).and_return(false)
|
157
|
+
delete :destroy_collection
|
158
|
+
response.should redirect_to 'where_i_came_from'
|
159
|
+
flash[:notice].should == "You do not have permission to edit the documents: #{@one.pid}, #{@two.pid}"
|
160
|
+
end
|
161
|
+
describe "when current user has access to the documents" do
|
162
|
+
before do
|
163
|
+
@one.save
|
164
|
+
@two.save
|
165
|
+
put :add, :id =>@one.pid
|
166
|
+
put :add, :id => @two.pid
|
167
|
+
controller.should_receive(:can?).with(:edit, @one.pid).and_return(true)
|
168
|
+
controller.should_receive(:can?).with(:edit, @two.pid).and_return(true)
|
169
|
+
ActiveFedora::Base.should_receive(:find).with( @one.pid, :cast=>true).and_return(@one)
|
170
|
+
ActiveFedora::Base.should_receive(:find).with( @two.pid, :cast=>true).and_return(@two)
|
171
|
+
end
|
172
|
+
it "should update all the field" do
|
173
|
+
delete :destroy_collection
|
174
|
+
response.should redirect_to '/catalog'
|
175
|
+
flash[:notice].should == "Batch delete complete"
|
176
|
+
Sample.find(@one.pid).should be_nil
|
177
|
+
Sample.find(@two.pid).should be_nil
|
178
|
+
end
|
179
|
+
end
|
180
|
+
end
|
122
181
|
|
123
182
|
describe "state" do
|
124
183
|
it "should save state on" do
|
@@ -145,6 +204,11 @@ describe BatchEditsController do
|
|
145
204
|
response.should redirect_to edit_batch_edits_path
|
146
205
|
session[:batch_document_ids].should == [123, 456]
|
147
206
|
end
|
207
|
+
it "ajax should add every document in the current resultset to the batch but not redirect" do
|
208
|
+
xhr :put, :all
|
209
|
+
response.should_not redirect_to edit_batch_edits_path
|
210
|
+
session[:batch_document_ids].should == [123, 456]
|
211
|
+
end
|
148
212
|
end
|
149
213
|
|
150
214
|
describe "clear" do
|
@@ -10,6 +10,9 @@ describe "Routes for batch_update" do
|
|
10
10
|
it "should route update" do
|
11
11
|
{ :put => batch_edits_path }.should route_to( :controller => "batch_edits", :action => "update")
|
12
12
|
end
|
13
|
+
it "should route delete batch" do
|
14
|
+
{ :delete => batch_edits_path }.should route_to( :controller => "batch_edits", :action => "destroy_collection")
|
15
|
+
end
|
13
16
|
it "should route add" do
|
14
17
|
{ :put => '/batch_edits/7'}.should route_to( :controller => "batch_edits", :action => "add", :id=>'7')
|
15
18
|
end
|
data/spec/support/Gemfile
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
source 'https://rubygems.org'
|
2
2
|
|
3
|
-
gem 'rails'
|
3
|
+
gem 'rails'
|
4
4
|
|
5
5
|
# Bundle edge Rails instead:
|
6
6
|
# gem 'rails', :git => 'git://github.com/rails/rails.git'
|
@@ -15,7 +15,7 @@ group :assets do
|
|
15
15
|
gem 'coffee-rails', '~> 3.2.1'
|
16
16
|
|
17
17
|
# See https://github.com/sstephenson/execjs#readme for more supported runtimes
|
18
|
-
|
18
|
+
gem 'therubyracer', :platforms => :ruby
|
19
19
|
|
20
20
|
gem 'uglifier', '>= 1.0.3'
|
21
21
|
end
|
@@ -1,11 +1,15 @@
|
|
1
1
|
$ ->
|
2
2
|
$("[data-behavior='batch-tools']").removeClass('hidden')
|
3
3
|
|
4
|
-
|
4
|
+
window.batch_edits_options = {} if typeof window.batch_edits_options is "undefined"
|
5
|
+
default_options =
|
5
6
|
checked_label: "Selected",
|
6
7
|
unchecked_label: "Select",
|
7
|
-
css_class: "batch_toggle"
|
8
|
-
|
8
|
+
css_class: "batch_toggle"
|
9
|
+
|
10
|
+
options = $.extend({}, default_options, window.batch_edits_options)
|
11
|
+
|
12
|
+
$("[data-behavior='batch-add-form']").bl_checkbox_submit(options)
|
9
13
|
|
10
14
|
setState = (obj) ->
|
11
15
|
activate = ->
|
@@ -45,3 +49,80 @@ $ ->
|
|
45
49
|
});
|
46
50
|
# TODO check-all
|
47
51
|
|
52
|
+
# ajax manager to queue ajax calls so all adds or removes are done in sequence
|
53
|
+
queue = ->
|
54
|
+
requests = []
|
55
|
+
addReq: (opt) ->
|
56
|
+
requests.push opt
|
57
|
+
|
58
|
+
removeReq: (opt) ->
|
59
|
+
requests.splice $.inArray(opt, requests), 1 if $.inArray(opt, requests) > -1
|
60
|
+
|
61
|
+
run: ->
|
62
|
+
self = this
|
63
|
+
orgSuc = undefined
|
64
|
+
if requests.length
|
65
|
+
oriSuc = requests[0].complete
|
66
|
+
requests[0].complete = ->
|
67
|
+
oriSuc() if typeof oriSuc is "function"
|
68
|
+
requests.shift()
|
69
|
+
self.run.apply self, []
|
70
|
+
|
71
|
+
$.ajax requests[0]
|
72
|
+
else
|
73
|
+
self.tid = setTimeout(->
|
74
|
+
self.run.apply self, []
|
75
|
+
, 1000)
|
76
|
+
|
77
|
+
stop: ->
|
78
|
+
requests = []
|
79
|
+
clearTimeout @tid
|
80
|
+
|
81
|
+
ajaxManager = (queue())
|
82
|
+
|
83
|
+
ajaxManager.run()
|
84
|
+
|
85
|
+
#override the default blacklight checkbox behavior to queue ajax calls
|
86
|
+
$("input[type='checkbox'].batch_toggle").click ->
|
87
|
+
checked = not this["checked"]
|
88
|
+
checkbox = $(this)
|
89
|
+
form = $(checkbox.parent()[0])
|
90
|
+
label = $(checkbox.parent().children("label")[0])
|
91
|
+
label.text(options.progress_label).attr "disabled", "disabled"
|
92
|
+
checkbox.attr "disabled", "disabled"
|
93
|
+
ajaxManager.addReq
|
94
|
+
queue: "add_doc"
|
95
|
+
url: form.attr("action")
|
96
|
+
dataType: "json"
|
97
|
+
type: form.attr("method").toUpperCase()
|
98
|
+
data: form.serialize()
|
99
|
+
error: ->
|
100
|
+
alert "Error Too Many results Selected"
|
101
|
+
update_state_for checked, checkbox, label, form
|
102
|
+
label.removeAttr "disabled"
|
103
|
+
checkbox.removeAttr "disabled"
|
104
|
+
|
105
|
+
success: (data, status, xhr) ->
|
106
|
+
unless xhr.status is 0
|
107
|
+
checked = not checked
|
108
|
+
update_state_for checked, checkbox, label, form
|
109
|
+
label.removeAttr "disabled"
|
110
|
+
checkbox.removeAttr "disabled"
|
111
|
+
else
|
112
|
+
alert "Error Too Many results Selected"
|
113
|
+
update_state_for checked, checkbox, label, form
|
114
|
+
label.removeAttr "disabled"
|
115
|
+
checkbox.removeAttr "disabled"
|
116
|
+
|
117
|
+
false
|
118
|
+
|
119
|
+
# complete the override by overriding update_state_for
|
120
|
+
update_state_for = (state, checkbox, label, form) ->
|
121
|
+
checkbox.attr "checked", state
|
122
|
+
label.toggleClass "checked", state
|
123
|
+
if state
|
124
|
+
form.find("input[name=_method]").val "delete"
|
125
|
+
label.text options.progress_label
|
126
|
+
else
|
127
|
+
form.find("input[name=_method]").val "put"
|
128
|
+
label.text options.progress_label
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: hydra-batch-edit
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.7
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2012-
|
13
|
+
date: 2012-11-20 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: blacklight
|
@@ -92,6 +92,7 @@ files:
|
|
92
92
|
- app/helpers/batch_edit_helper.rb
|
93
93
|
- app/views/batch_edits/_add_button.html.erb
|
94
94
|
- app/views/batch_edits/_check_all.html.erb
|
95
|
+
- app/views/batch_edits/_delete_batch.html.erb
|
95
96
|
- app/views/batch_edits/_next_page.html.erb
|
96
97
|
- app/views/batch_edits/_tools.html.erb
|
97
98
|
- app/views/batch_edits/edit.html.erb
|