rails_admin_import 2.3.0 → 3.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +9 -0
- data/README.md +22 -10
- data/app/views/rails_admin/main/_results.html.erb +35 -0
- data/app/views/rails_admin/main/_section.html.erb +21 -0
- data/app/views/rails_admin/main/import.html.erb +102 -0
- data/lib/rails_admin_import/action.rb +1 -1
- data/lib/rails_admin_import/import_model.rb +1 -1
- data/lib/rails_admin_import/importer.rb +2 -2
- data/lib/rails_admin_import/version.rb +1 -1
- metadata +12 -12
- data/app/views/rails_admin/main/_results.html.haml +0 -18
- data/app/views/rails_admin/main/_section.html.haml +0 -10
- data/app/views/rails_admin/main/import.html.haml +0 -80
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8729f794b1c8ace3c08caeed84399b2ff8a997aeb7d623b05f132de9ac12ce94
|
4
|
+
data.tar.gz: bdb84ea9e8ad25667a74846581d0e34ac5570d76141e446c4d2e9a3752fe3e91
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3470647f410a12da9f6b8d5711ba1b2b49d24b9c3a3995dcb96fd8db306fe50a339a4480d46192b786e1053205285382eeac69850cab7bb6fb5f78631253931a
|
7
|
+
data.tar.gz: 9e6fba88b0fb93af73c05dd301db9a64ae0874c2d711817279454d3d104d9f3994c4cab12e02767d223defda77945f5e2c147adf78a1e5eb9daa787d1d1bfcd4
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,14 @@
|
|
1
1
|
# Change Log
|
2
2
|
|
3
|
+
# 3.0.0 / 2022-01-29
|
4
|
+
|
5
|
+
- BREAKING CHANGE: Templates are now compatible with Rails Admin 3.x. For Rails Admin 2.x, continue using version 2.3.1. Thanks @Wowu
|
6
|
+
|
7
|
+
# 2.3.1 / 2022-01-29
|
8
|
+
|
9
|
+
- Mark compatibility to Rails Admin < 3.0
|
10
|
+
- Bump Nokogiri in tests
|
11
|
+
|
3
12
|
# 2.3.0 / 2021-06-11
|
4
13
|
|
5
14
|
- Added an option to pass filename for each record. Thanks @waheedi
|
data/README.md
CHANGED
@@ -1,15 +1,21 @@
|
|
1
1
|
# Rails Admin Import
|
2
2
|
|
3
|
-
[![Build Status](https://github.com/
|
3
|
+
[![Build Status](https://github.com/stephskardal/rails_admin_import/actions/workflows/ruby.yml/badge.svg)](https://github.com/stephskardal/rails_admin_import/actions/workflows/ruby.yml)
|
4
4
|
|
5
5
|
Plugin functionality to add generic import to Rails Admin from CSV, JSON and XLSX files
|
6
6
|
|
7
|
+
## Versions
|
8
|
+
|
9
|
+
Rails Admin Import 3.x is compatible with Rails Admin 3.x.
|
10
|
+
|
11
|
+
If you're still using Rails Admin 2.x, use Rails Admin Import 2.3.1
|
12
|
+
|
7
13
|
## Installation
|
8
14
|
|
9
15
|
* First, add to Gemfile:
|
10
16
|
|
11
17
|
```ruby
|
12
|
-
gem "rails_admin_import", "~>
|
18
|
+
gem "rails_admin_import", "~> 3.0"
|
13
19
|
```
|
14
20
|
|
15
21
|
* Define configuration in `config/initializers/rails_admin_import.rb`:
|
@@ -395,7 +401,7 @@ Since the import functionality is rarely used in many applications, some gems ar
|
|
395
401
|
If you prefer to eager load all dependecies at boot, use this line in your `Gemfile`.
|
396
402
|
|
397
403
|
```ruby
|
398
|
-
gem "rails_admin_import", "~>
|
404
|
+
gem "rails_admin_import", "~> 3.0", require: "rails_admin_import/eager_load"
|
399
405
|
```
|
400
406
|
|
401
407
|
## Import error due to Rails class reloading
|
@@ -408,16 +414,22 @@ Another suggestion is to set `config.cache_classes = true` to true in your `deve
|
|
408
414
|
|
409
415
|
## Customize the UI
|
410
416
|
|
411
|
-
If you want to hide all the advanced fields from the import UI, you can copy [`app/views/rails_admin/main/import.html.haml`](app/views/rails_admin/main/import.html.
|
417
|
+
If you want to hide all the advanced fields from the import UI, you can copy [`app/views/rails_admin/main/import.html.haml`](app/views/rails_admin/main/import.html.erb) to your project at the same path. Add `hidden` class to elements you want to hide.
|
412
418
|
|
413
419
|
For example:
|
414
420
|
|
415
|
-
```
|
416
|
-
|
417
|
-
|
418
|
-
|
419
|
-
|
420
|
-
|
421
|
+
```erb
|
422
|
+
<div class="form-group control-group hidden">
|
423
|
+
<label class="col-sm-2 control-label">
|
424
|
+
<%= t("admin.import.update_if_exists") %>
|
425
|
+
</label>
|
426
|
+
<div class="col-sm-10 controls">
|
427
|
+
<%= check_box_tag :update_if_exists, '1', RailsAdminImport.config.update_if_exists, :class => "form-control" %>
|
428
|
+
<p class="help-block">
|
429
|
+
<%= t('admin.import.help.update_if_exists') %>
|
430
|
+
</p>
|
431
|
+
</div>
|
432
|
+
</div>
|
421
433
|
```
|
422
434
|
|
423
435
|
## Upgrading
|
@@ -0,0 +1,35 @@
|
|
1
|
+
<% if @results && @results[:success].any? %>
|
2
|
+
<div class="alert alert-success form-horizontal denser">
|
3
|
+
<fieldset>
|
4
|
+
<legend>
|
5
|
+
<i class="fas fa-chevron-right"></i>
|
6
|
+
<%= @results[:success_message] %>
|
7
|
+
</legend>
|
8
|
+
<ul class="control-group" style="display: none">
|
9
|
+
<% @results[:success].each do |message| %>
|
10
|
+
<li>
|
11
|
+
<%= message %>
|
12
|
+
</li>
|
13
|
+
<% end %>
|
14
|
+
</ul>
|
15
|
+
</fieldset>
|
16
|
+
</div>
|
17
|
+
<% end %>
|
18
|
+
|
19
|
+
<% if @results && @results[:error].any? %>
|
20
|
+
<div class="alert alert-danger form-horizontal denser">
|
21
|
+
<fieldset>
|
22
|
+
<legend>
|
23
|
+
<i class="fas fa-chevron-down"></i>
|
24
|
+
<%= @results[:error_message] %>
|
25
|
+
</legend>
|
26
|
+
<ul class="control-group">
|
27
|
+
<% @results[:error].each do |message| %>
|
28
|
+
<li>
|
29
|
+
<%= message %>
|
30
|
+
</li>
|
31
|
+
<% end %>
|
32
|
+
</ul>
|
33
|
+
</fieldset>
|
34
|
+
</div>
|
35
|
+
<% end %>
|
@@ -0,0 +1,21 @@
|
|
1
|
+
<% if fields.any? %>
|
2
|
+
<div class="form-group control-group">
|
3
|
+
<label class="col-sm-2 control-label">
|
4
|
+
<%= t("admin.import.#{section}") %>
|
5
|
+
</label>
|
6
|
+
<div class="col-sm-10 controls">
|
7
|
+
<ul class="list-unstyled">
|
8
|
+
<% fields.each do |field| %>
|
9
|
+
<li>
|
10
|
+
<label>
|
11
|
+
<%= field.label %>
|
12
|
+
</label>
|
13
|
+
</li>
|
14
|
+
<% end %>
|
15
|
+
</ul>
|
16
|
+
<p class="help-block">
|
17
|
+
<%= t("admin.import.help.#{section}") %>
|
18
|
+
</p>
|
19
|
+
</div>
|
20
|
+
</div>
|
21
|
+
<% end %>
|
@@ -0,0 +1,102 @@
|
|
1
|
+
<%
|
2
|
+
translations = {
|
3
|
+
add: t('admin.import.enumeration.add'),
|
4
|
+
chooseAll: t('admin.import.enumeration.choose_all'),
|
5
|
+
clearAll: t('admin.import.enumeration.clear_all'),
|
6
|
+
down: t('admin.import.enumeration.down'),
|
7
|
+
remove: t('admin.import.enumeration.remove'),
|
8
|
+
search: t('admin.import.enumeration.search'),
|
9
|
+
up: t('admin.import.enumeration.up')
|
10
|
+
}
|
11
|
+
%>
|
12
|
+
|
13
|
+
<%= render "results" %>
|
14
|
+
<%= form_tag import_path(@abstract_model), :multipart => true, class: 'form-horizontal denser' do %>
|
15
|
+
<input name="send_data" type="hidden" value="true">/</input>
|
16
|
+
<fieldset>
|
17
|
+
<legend>
|
18
|
+
<i class="fas fa-chevron-down"></i>
|
19
|
+
<%= t('admin.import.legend.fields') %>
|
20
|
+
</legend>
|
21
|
+
<%= render "section", section: "model_fields", fields: @import_model.model_fields %>
|
22
|
+
<%= render "section", section: "association_fields", fields: @import_model.association_fields %>
|
23
|
+
</fieldset>
|
24
|
+
<fieldset>
|
25
|
+
<legend>
|
26
|
+
<i class="fas fa-chevron-down"></i>
|
27
|
+
<%= t('admin.import.legend.upload') %>
|
28
|
+
</legend>
|
29
|
+
<div class="form-group control-group">
|
30
|
+
<label class="col-sm-2 control-label" for="file">
|
31
|
+
<%= t("admin.import.file") %>
|
32
|
+
</label>
|
33
|
+
<div class="col-sm-10 controls">
|
34
|
+
<%= file_field_tag :file, :class => "form-control" %>
|
35
|
+
<p class="help-block">
|
36
|
+
<%= t('admin.import.help.file_limit', limit: RailsAdminImport.config.line_item_limit) %>
|
37
|
+
</p>
|
38
|
+
</div>
|
39
|
+
</div>
|
40
|
+
<div class="form-group control-group">
|
41
|
+
<label class="col-sm-2 control-label" for="encoding">
|
42
|
+
<%= t("admin.import.encoding") %>
|
43
|
+
</label>
|
44
|
+
<div class="col-sm-10 controls">
|
45
|
+
<%= select_tag 'encoding', options_for_select(Encoding.name_list.sort), include_blank: true, data: { enumeration: true, options: { regional: translations } } %>
|
46
|
+
<p class="help-block">
|
47
|
+
<%= t('admin.import.help.encoding', name: 'UTF-8') %>
|
48
|
+
</p>
|
49
|
+
</div>
|
50
|
+
</div>
|
51
|
+
<div class="form-group control-group">
|
52
|
+
<label class="col-sm-2 control-label">
|
53
|
+
<%= t("admin.import.update_if_exists") %>
|
54
|
+
</label>
|
55
|
+
<div class="col-sm-10 controls">
|
56
|
+
<%= check_box_tag :update_if_exists, '1', RailsAdminImport.config.update_if_exists, :class => "form-control" %>
|
57
|
+
<p class="help-block">
|
58
|
+
<%= t('admin.import.help.update_if_exists') %>
|
59
|
+
</p>
|
60
|
+
</div>
|
61
|
+
</div>
|
62
|
+
<div class="form-group control-group">
|
63
|
+
<label class="col-sm-2 control-label" for="update_lookup">
|
64
|
+
<%= t("admin.import.update_lookup") %>
|
65
|
+
</label>
|
66
|
+
<div class="col-sm-10 controls">
|
67
|
+
<%= select_tag 'update_lookup', options_for_select(@import_model.update_lookup_field_names, Array.wrap(@import_model.config.mapping_key).map(&:to_s)), multiple: true, data: { enumeration: true, options: { regional: translations } } %>
|
68
|
+
</div>
|
69
|
+
</div>
|
70
|
+
</fieldset>
|
71
|
+
<% unless @import_model.association_fields.empty? %>
|
72
|
+
<fieldset>
|
73
|
+
<legend>
|
74
|
+
<i class="fas fa-chevron-down"></i>
|
75
|
+
<%= t('admin.import.legend.mapping') %>
|
76
|
+
</legend>
|
77
|
+
<% @import_model.association_fields.each do |field| %>
|
78
|
+
<div class="form-group control-group">
|
79
|
+
<label class="col-sm-2 control-label">
|
80
|
+
<%= field.label %>
|
81
|
+
<%= t("admin.import.mapping") %>
|
82
|
+
</label>
|
83
|
+
<div class="col-sm-10 controls">
|
84
|
+
<%= select_tag "associations[#{field.name}]", options_for_select(@import_model.associated_model_fields(field), Array.wrap(@import_model.associated_config(field).mapping_key).first.to_s), data: { enumeration: true, options: { regional: translations } } %>
|
85
|
+
</div>
|
86
|
+
</div>
|
87
|
+
<% end %>
|
88
|
+
</fieldset>
|
89
|
+
<% end %>
|
90
|
+
<br/>
|
91
|
+
<div class="form-actions">
|
92
|
+
<input name="return_to" type="<%= :hidden %>" value="<%= (request.params[:return_to].presence || request.referer) %>"></input>
|
93
|
+
<button class="btn btn-primary" data_disable_with="Uploading..." name="commit" type="submit">
|
94
|
+
<i class="fas fa-check"></i>
|
95
|
+
<%= t("admin.form.save") %>
|
96
|
+
</button>
|
97
|
+
<button class="btn" name="_continue" type="submit">
|
98
|
+
<i class="fas fa-times"></i>
|
99
|
+
<%= t("admin.form.cancel") %>
|
100
|
+
</button>
|
101
|
+
</div>
|
102
|
+
<% end %>
|
@@ -66,7 +66,7 @@ module RailsAdminImport
|
|
66
66
|
if @config.mapping_key_list.present?
|
67
67
|
@update_lookup_field_names = @config.mapping_key_list
|
68
68
|
else
|
69
|
-
@update_lookup_field_names ||= model_fields.map(&:name) + belongs_to_fields.map(&:
|
69
|
+
@update_lookup_field_names ||= model_fields.map(&:name) + belongs_to_fields.map(&:associated_primary_key)
|
70
70
|
end
|
71
71
|
end
|
72
72
|
|
@@ -205,10 +205,10 @@ module RailsAdminImport
|
|
205
205
|
|
206
206
|
if object.nil?
|
207
207
|
object = model.new
|
208
|
-
perform_model_callback(object, :before_import_attributes,
|
208
|
+
perform_model_callback(object, :before_import_attributes, new_attrs)
|
209
209
|
object.attributes = new_attrs
|
210
210
|
else
|
211
|
-
perform_model_callback(object, :before_import_attributes,
|
211
|
+
perform_model_callback(object, :before_import_attributes, new_attrs)
|
212
212
|
object.attributes = new_attrs.except(update.map(&:to_sym))
|
213
213
|
end
|
214
214
|
object
|
metadata
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rails_admin_import
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 3.0.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Steph Skardal
|
8
8
|
- Julien Vanier
|
9
|
-
autorequire:
|
9
|
+
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2022-04-10 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rails
|
@@ -31,14 +31,14 @@ dependencies:
|
|
31
31
|
requirements:
|
32
32
|
- - ">="
|
33
33
|
- !ruby/object:Gem::Version
|
34
|
-
version: 0.
|
34
|
+
version: 3.0.0.beta
|
35
35
|
type: :runtime
|
36
36
|
prerelease: false
|
37
37
|
version_requirements: !ruby/object:Gem::Requirement
|
38
38
|
requirements:
|
39
39
|
- - ">="
|
40
40
|
- !ruby/object:Gem::Version
|
41
|
-
version: 0.
|
41
|
+
version: 3.0.0.beta
|
42
42
|
- !ruby/object:Gem::Dependency
|
43
43
|
name: charlock_holmes
|
44
44
|
requirement: !ruby/object:Gem::Requirement
|
@@ -67,7 +67,7 @@ dependencies:
|
|
67
67
|
- - "~>"
|
68
68
|
- !ruby/object:Gem::Version
|
69
69
|
version: '1.0'
|
70
|
-
description:
|
70
|
+
description:
|
71
71
|
email:
|
72
72
|
- steph@endpoint.com
|
73
73
|
- jvanier@gmail.com
|
@@ -79,9 +79,9 @@ files:
|
|
79
79
|
- MIT-LICENSE
|
80
80
|
- README.md
|
81
81
|
- Rakefile
|
82
|
-
- app/views/rails_admin/main/_results.html.
|
83
|
-
- app/views/rails_admin/main/_section.html.
|
84
|
-
- app/views/rails_admin/main/import.html.
|
82
|
+
- app/views/rails_admin/main/_results.html.erb
|
83
|
+
- app/views/rails_admin/main/_section.html.erb
|
84
|
+
- app/views/rails_admin/main/import.html.erb
|
85
85
|
- config/locales/README.md
|
86
86
|
- config/locales/import.en.yml
|
87
87
|
- lib/rails_admin_import.rb
|
@@ -106,7 +106,7 @@ homepage: https://github.com/stephskardal/rails_admin_import
|
|
106
106
|
licenses:
|
107
107
|
- MIT
|
108
108
|
metadata: {}
|
109
|
-
post_install_message:
|
109
|
+
post_install_message:
|
110
110
|
rdoc_options: []
|
111
111
|
require_paths:
|
112
112
|
- lib
|
@@ -121,8 +121,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
121
121
|
- !ruby/object:Gem::Version
|
122
122
|
version: '0'
|
123
123
|
requirements: []
|
124
|
-
rubygems_version: 3.
|
125
|
-
signing_key:
|
124
|
+
rubygems_version: 3.1.6
|
125
|
+
signing_key:
|
126
126
|
specification_version: 4
|
127
127
|
summary: Import functionality for Rails Admin
|
128
128
|
test_files: []
|
@@ -1,18 +0,0 @@
|
|
1
|
-
- if @results && @results[:success].any?
|
2
|
-
.alert.alert-success.form-horizontal.denser
|
3
|
-
%fieldset
|
4
|
-
%legend
|
5
|
-
%i.icon-chevron-right
|
6
|
-
= @results[:success_message]
|
7
|
-
%ul.control-group{style: 'display: none'}
|
8
|
-
- @results[:success].each do |message|
|
9
|
-
%li= message
|
10
|
-
- if @results && @results[:error].any?
|
11
|
-
.alert.alert-danger.form-horizontal.denser
|
12
|
-
%fieldset
|
13
|
-
%legend
|
14
|
-
%i.icon-chevron-down
|
15
|
-
= @results[:error_message]
|
16
|
-
%ul.control-group
|
17
|
-
- @results[:error].each do |message|
|
18
|
-
%li= message
|
@@ -1,10 +0,0 @@
|
|
1
|
-
- if fields.any?
|
2
|
-
.form-group.control-group
|
3
|
-
%label.col-sm-2.control-label= t("admin.import.#{section}")
|
4
|
-
.col-sm-10.controls
|
5
|
-
%ul.list-unstyled
|
6
|
-
- fields.each do |field|
|
7
|
-
%li
|
8
|
-
%label= capitalize_first_letter(field.label)
|
9
|
-
%p.help-block= t("admin.import.help.#{section}")
|
10
|
-
|
@@ -1,80 +0,0 @@
|
|
1
|
-
:ruby
|
2
|
-
translations = {
|
3
|
-
add: t('admin.import.enumeration.add'),
|
4
|
-
chooseAll: t('admin.import.enumeration.choose_all'),
|
5
|
-
clearAll: t('admin.import.enumeration.clear_all'),
|
6
|
-
down: t('admin.import.enumeration.down'),
|
7
|
-
remove: t('admin.import.enumeration.remove'),
|
8
|
-
search: t('admin.import.enumeration.search'),
|
9
|
-
up: t('admin.import.enumeration.up')
|
10
|
-
}
|
11
|
-
|
12
|
-
= render "results"
|
13
|
-
|
14
|
-
= form_tag import_path(@abstract_model), :multipart => true, class: 'form-horizontal denser' do
|
15
|
-
|
16
|
-
%input{name: "send_data", type: "hidden", value: "true"}/
|
17
|
-
%fieldset
|
18
|
-
%legend
|
19
|
-
%i.icon-chevron-down
|
20
|
-
= t('admin.import.legend.fields')
|
21
|
-
|
22
|
-
= render "section", section: "model_fields", fields: @import_model.model_fields
|
23
|
-
= render "section", section: "association_fields", fields: @import_model.association_fields
|
24
|
-
|
25
|
-
%fieldset
|
26
|
-
%legend
|
27
|
-
%i.icon-chevron-down
|
28
|
-
= t('admin.import.legend.upload')
|
29
|
-
.form-group.control-group
|
30
|
-
%label.col-sm-2.control-label{for: "file"}= t("admin.import.file")
|
31
|
-
.col-sm-10.controls
|
32
|
-
= file_field_tag :file, :class => "form-control"
|
33
|
-
%p.help-block= t('admin.import.help.file_limit', limit: RailsAdminImport.config.line_item_limit)
|
34
|
-
.form-group.control-group
|
35
|
-
%label.col-sm-2.control-label{for: "encoding"}= t("admin.import.encoding")
|
36
|
-
.col-sm-10.controls
|
37
|
-
= select_tag 'encoding',
|
38
|
-
options_for_select(Encoding.name_list.sort),
|
39
|
-
include_blank: true, data: { enumeration: true, options: { regional: translations } }
|
40
|
-
%p.help-block= t('admin.import.help.encoding', name: 'UTF-8')
|
41
|
-
.form-group.control-group
|
42
|
-
%label.col-sm-2.control-label= t("admin.import.update_if_exists")
|
43
|
-
.col-sm-10.controls
|
44
|
-
= check_box_tag :update_if_exists, '1', RailsAdminImport.config.update_if_exists, :class => "form-control"
|
45
|
-
%p.help-block= t('admin.import.help.update_if_exists')
|
46
|
-
.form-group.control-group
|
47
|
-
%label.col-sm-2.control-label{for: "update_lookup"}= t("admin.import.update_lookup")
|
48
|
-
.col-sm-10.controls
|
49
|
-
= select_tag 'update_lookup',
|
50
|
-
options_for_select(@import_model.update_lookup_field_names,
|
51
|
-
Array.wrap(@import_model.config.mapping_key).map(&:to_s)),
|
52
|
-
multiple: true,
|
53
|
-
data: { enumeration: true, options: { regional: translations } }
|
54
|
-
|
55
|
-
- unless @import_model.association_fields.empty?
|
56
|
-
%fieldset
|
57
|
-
%legend
|
58
|
-
%i.icon-chevron-down
|
59
|
-
= t('admin.import.legend.mapping')
|
60
|
-
|
61
|
-
- @import_model.association_fields.each do |field|
|
62
|
-
.form-group.control-group
|
63
|
-
%label.col-sm-2.control-label
|
64
|
-
= capitalize_first_letter(field.label)
|
65
|
-
= t("admin.import.mapping")
|
66
|
-
.col-sm-10.controls
|
67
|
-
= select_tag "associations[#{field.name}]",
|
68
|
-
options_for_select(@import_model.associated_model_fields(field),
|
69
|
-
Array.wrap(@import_model.associated_config(field).mapping_key).first.to_s),
|
70
|
-
data: { enumeration: true, options: { regional: translations } }
|
71
|
-
|
72
|
-
%br
|
73
|
-
.form-actions
|
74
|
-
%input{type: :hidden, name: 'return_to', value: (request.params[:return_to].presence || request.referer)}
|
75
|
-
%button.btn.btn-primary{type: "submit", name: "commit", data: {disable_with: "Uploading..."} }
|
76
|
-
%i.icon-white.icon-ok
|
77
|
-
= t("admin.form.save")
|
78
|
-
%button.btn{type: "submit", name: "_continue"}
|
79
|
-
%i.icon-remove
|
80
|
-
= t("admin.form.cancel")
|