rails_admin_json_editor 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 04b3bb8371e4bed444b1fbe9d35f3ba0f2b2aece
4
- data.tar.gz: da37c5f1ef2409fd27b9498b4964812281b35fbf
3
+ metadata.gz: 78111023f4c078ee3c814246cde586fac767e666
4
+ data.tar.gz: 51c14ae94d388c03b50fbaadf1952ed53df62691
5
5
  SHA512:
6
- metadata.gz: 40b4d2f80e5cc1869630332a9a1a5cf36c08976d2821fa30916979fb3328ca3947d50edea48ec763714add6b11828f1536576df9b785d187f67ef37a63c43081
7
- data.tar.gz: 416d02f0820df3953d49b2ce51f10e0934e3fbc4853c501a4d55b2c663d5aa18cf20754b07109c13bbec763278ffa06755207c45d78372d7f7c48263bc4ab881
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
@@ -1,3 +1,3 @@
1
1
  module RailsAdminJsonEditor
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.2"
3
3
  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.1
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