rails_admin_json_editor 0.0.1 → 0.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/app/views/rails_admin/main/_form_json_editor.html.erb +47 -0
- data/app/views/rails_admin/main/_form_json_editor_component.html.erb +29 -0
- data/app/views/rails_admin/main/_form_json_editor_dropdown.html.erb +9 -0
- data/app/views/rails_admin/main/_form_json_editor_picker.html.erb +52 -0
- data/config/initializers/rails_admin_json_editor.rb +86 -0
- data/lib/rails_admin_json_editor/version.rb +1 -1
- metadata +6 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 78111023f4c078ee3c814246cde586fac767e666
|
4
|
+
data.tar.gz: 51c14ae94d388c03b50fbaadf1952ed53df62691
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 449e8c87d4476abbf53b56385a51bc6499bba7adcaf44675d54e2bc2a88041ffb875f7818c342f9149ce3afe88a9d53a60e4e5225426ff205f5b33c143954378
|
7
|
+
data.tar.gz: 54a97e63e3d571ec631d94a054ba351ea089a5dc12db428e6c52a512c185ebed2e7a1333520d5805a12f56471e92618c7a2e64bbc280e3fa8a0ed80f3247664b
|
@@ -0,0 +1,47 @@
|
|
1
|
+
<script type="text/javascript">
|
2
|
+
var recordPickers = {};
|
3
|
+
console.log('yo?')
|
4
|
+
</script>
|
5
|
+
|
6
|
+
<div ref="components_json" class="components_json">
|
7
|
+
<div v-repeat="components" class="component">
|
8
|
+
<% field.components.each do |component| %>
|
9
|
+
<%= render 'form_json_editor_component', locals: { component: component } %>
|
10
|
+
<% end %>
|
11
|
+
</div>
|
12
|
+
|
13
|
+
<%= render 'form_json_editor_dropdown', locals: { components: field.components } %>
|
14
|
+
|
15
|
+
<%= form.text_area field.name, 'v-model' => 'components', cols:50, rows:10, style: 'margin-top:40px' %>
|
16
|
+
</div>
|
17
|
+
|
18
|
+
<% field.components
|
19
|
+
.map(&:fields)
|
20
|
+
.flatten
|
21
|
+
.select { |f| f.picker_records != nil }
|
22
|
+
.each do |f| %>
|
23
|
+
<%= render 'form_json_editor_picker', locals: { field:f } %>
|
24
|
+
<% end %>
|
25
|
+
|
26
|
+
<script type="text/javascript">
|
27
|
+
var componentsVM = new Vue({
|
28
|
+
el: '[ref=components_json]',
|
29
|
+
data: {
|
30
|
+
components: <%= raw field.value || "[]" %>
|
31
|
+
},
|
32
|
+
methods: {
|
33
|
+
addComponent: function(e) {
|
34
|
+
e.preventDefault();
|
35
|
+
var type = e.target.getAttribute('component-type');
|
36
|
+
this.components.push({ type:type })
|
37
|
+
},
|
38
|
+
openPicker: function(e) {
|
39
|
+
e.preventDefault();
|
40
|
+
var name = e.target.getAttribute('component-name');
|
41
|
+
var index = e.target.getAttribute('component-index');
|
42
|
+
console.log('openPicker', name, index);
|
43
|
+
recordPickers[name].show(index);
|
44
|
+
}
|
45
|
+
}
|
46
|
+
});
|
47
|
+
</script>
|
@@ -0,0 +1,29 @@
|
|
1
|
+
<div v-show="type == '<%= locals[:component].type %>'">
|
2
|
+
<legend><%= locals[:component].label %></legend>
|
3
|
+
<%= content_tag :p, locals[:component].help, class: "help-block" unless locals[:component].help.nil? %>
|
4
|
+
|
5
|
+
<% locals[:component].fields.each do |f| %>
|
6
|
+
<div class="control-group">
|
7
|
+
<%= label_tag f.name, f.label, class: "control-label" %>
|
8
|
+
|
9
|
+
<div class="controls">
|
10
|
+
<% if f.type == :string %>
|
11
|
+
<%= text_field_tag f.name, nil, 'v-model' => "props.#{f.name}" %>
|
12
|
+
<% end %>
|
13
|
+
|
14
|
+
<% if f.type == :text %>
|
15
|
+
<%= text_area_tag f.name, nil, 'v-model' => "props.#{f.name}" %>
|
16
|
+
<% end %>
|
17
|
+
|
18
|
+
<% if f.type == :picker %>
|
19
|
+
<%= link_to 'Selecteer', '#', role: 'button', class: 'btn',
|
20
|
+
'v-on' => 'click: openPicker',
|
21
|
+
'component-name' => f.name,
|
22
|
+
'component-index' => '{{ $index }}' %>
|
23
|
+
<% end %>
|
24
|
+
|
25
|
+
<%= content_tag :p, f.help, class: "help-block" unless f.help.nil? %>
|
26
|
+
</div>
|
27
|
+
</div>
|
28
|
+
<% end %>
|
29
|
+
</div>
|
@@ -0,0 +1,9 @@
|
|
1
|
+
<div class="dropdown">
|
2
|
+
<a class="dropdown-toggle btn btn-info" data-toggle="dropdown" href="#">Component toevoegen <b class="caret"></b></a>
|
3
|
+
|
4
|
+
<ul class="dropdown-menu">
|
5
|
+
<% locals[:components].each do |component| %>
|
6
|
+
<li><a href="#" v-on="click: addComponent" component-type="<%= component.type %>"><%= component.type %></a></li>
|
7
|
+
<% end %>
|
8
|
+
</ul>
|
9
|
+
</div>
|
@@ -0,0 +1,52 @@
|
|
1
|
+
<%
|
2
|
+
name = locals[:field].name
|
3
|
+
id = "#{name}-record-picker"
|
4
|
+
records = locals[:field].picker_records
|
5
|
+
%>
|
6
|
+
|
7
|
+
<div id="<%= id %>" class="modal hide fade">
|
8
|
+
<div class="modal-header">
|
9
|
+
<button type="button" class="close" data-dismiss="modal">×</button>
|
10
|
+
<h3>Kies <%= name %></h3>
|
11
|
+
</div>
|
12
|
+
|
13
|
+
<div class="modal-body">
|
14
|
+
<select v-model="selectedRecord" placeholder="Zoeken">
|
15
|
+
<option value=""></option>
|
16
|
+
<% records.each do |record| %>
|
17
|
+
<option value="<%= record.to_json %>"><%= record.upload_file_name %></option>
|
18
|
+
<% end %>
|
19
|
+
</select>
|
20
|
+
</div>
|
21
|
+
|
22
|
+
<div class="modal-footer">
|
23
|
+
<button class="btn" data-dismiss="modal">Sluiten</button>
|
24
|
+
<button v-on="click:submit" class="btn btn-primary">Opslaan</button>
|
25
|
+
</div>
|
26
|
+
</div>
|
27
|
+
|
28
|
+
<script type="text/javascript">
|
29
|
+
recordPickers['<%= name %>'] = new Vue({
|
30
|
+
el: '#<%= id %>',
|
31
|
+
data: {
|
32
|
+
componentIndex: null,
|
33
|
+
selectedRecord: null
|
34
|
+
},
|
35
|
+
methods: {
|
36
|
+
show: function(componentIndex) {
|
37
|
+
this.componentIndex = componentIndex;
|
38
|
+
this.selectedRecord = null;
|
39
|
+
$('#<%= id %>').modal();
|
40
|
+
},
|
41
|
+
submit: function(e) {
|
42
|
+
e.preventDefault();
|
43
|
+
var values = JSON.parse(this.selectedRecord)
|
44
|
+
|
45
|
+
if(values) {
|
46
|
+
componentsVM.components[this.componentIndex].props = values
|
47
|
+
$('#<%= id %>').modal('hide');
|
48
|
+
}
|
49
|
+
}
|
50
|
+
}
|
51
|
+
})
|
52
|
+
</script>
|
@@ -0,0 +1,86 @@
|
|
1
|
+
require 'rails_admin/config/fields/types/text'
|
2
|
+
|
3
|
+
module RailsAdmin
|
4
|
+
module Config
|
5
|
+
module Fields
|
6
|
+
module Types
|
7
|
+
class JsonEditor < RailsAdmin::Config::Fields::Types::Text
|
8
|
+
# Register field type for the type loader
|
9
|
+
RailsAdmin::Config::Fields::Types.register(self)
|
10
|
+
|
11
|
+
register_instance_option :partial do
|
12
|
+
:form_json_editor
|
13
|
+
end
|
14
|
+
|
15
|
+
register_instance_option :components do
|
16
|
+
@components
|
17
|
+
end
|
18
|
+
|
19
|
+
def setup
|
20
|
+
@components = []
|
21
|
+
yield if block_given?
|
22
|
+
end
|
23
|
+
|
24
|
+
def component(type)
|
25
|
+
component = Component.new(type)
|
26
|
+
|
27
|
+
yield(component) if block_given?
|
28
|
+
|
29
|
+
@components << component
|
30
|
+
end
|
31
|
+
|
32
|
+
class Component
|
33
|
+
attr_accessor :type, :fields
|
34
|
+
attr_accessor :label, :help
|
35
|
+
|
36
|
+
def initialize(type)
|
37
|
+
@type = type
|
38
|
+
@fields = []
|
39
|
+
@label = type
|
40
|
+
end
|
41
|
+
|
42
|
+
def field(name, type)
|
43
|
+
field = Field.new(name, type)
|
44
|
+
|
45
|
+
yield(field) if block_given?
|
46
|
+
|
47
|
+
@fields << field
|
48
|
+
end
|
49
|
+
|
50
|
+
def label(s = nil)
|
51
|
+
if s.nil? then return @label else @label = s end
|
52
|
+
end
|
53
|
+
|
54
|
+
def help(s = nil)
|
55
|
+
if s.nil? then return @help else @help = s end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
class Field
|
60
|
+
attr_accessor :name, :type
|
61
|
+
attr_accessor :label, :help
|
62
|
+
attr_accessor :picker_records
|
63
|
+
|
64
|
+
def initialize(name, type)
|
65
|
+
@name = name
|
66
|
+
@type = type
|
67
|
+
@label = name
|
68
|
+
end
|
69
|
+
|
70
|
+
def label(s = nil)
|
71
|
+
if s.nil? then return @label else @label = s end
|
72
|
+
end
|
73
|
+
|
74
|
+
def help(s = nil)
|
75
|
+
if s.nil? then return @help else @help = s end
|
76
|
+
end
|
77
|
+
|
78
|
+
def picker_records(a = nil)
|
79
|
+
if a.nil? then return @picker_records else @picker_records = a end
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
85
|
+
end
|
86
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rails_admin_json_editor
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jasper Haggenburg
|
@@ -65,6 +65,11 @@ files:
|
|
65
65
|
- LICENSE.txt
|
66
66
|
- README.md
|
67
67
|
- Rakefile
|
68
|
+
- app/views/rails_admin/main/_form_json_editor.html.erb
|
69
|
+
- app/views/rails_admin/main/_form_json_editor_component.html.erb
|
70
|
+
- app/views/rails_admin/main/_form_json_editor_dropdown.html.erb
|
71
|
+
- app/views/rails_admin/main/_form_json_editor_picker.html.erb
|
72
|
+
- config/initializers/rails_admin_json_editor.rb
|
68
73
|
- lib/rails_admin_json_editor.rb
|
69
74
|
- lib/rails_admin_json_editor/version.rb
|
70
75
|
- rails_admin_json_editor.gemspec
|