rails_admin_json_editor 0.0.5 → 0.0.6

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: ddd92f50da82bca1dec3c00600bd72c8fd9f62e9
4
- data.tar.gz: b12d5ade0891ba00ac288c05d00b9327db47372a
3
+ metadata.gz: bfa96e00db2bfaabb8f895b9329817f255ba06df
4
+ data.tar.gz: 3622c63269ad8d5d47224ac9385f4eec57db8b01
5
5
  SHA512:
6
- metadata.gz: ccec4610aa25d05ea38421cf0809a5dfa97f989e72a93237bb9b5a644c5405159fb0b8b06c263d8f4b767b0e97462dca6a2d52ce082fe51f1a42ed9aa801ac99
7
- data.tar.gz: 9bef18df4bb6fe03ece3004807ff5277a023454db16ce8f5e5aa7ed8405ba91b1c5e670625a6eb9b2a25715b8f1bf4c242443436dce031147e4c8bef663c0094
6
+ metadata.gz: 879ecc9a8a2028e79ec1842d88094e711c0bc9055133fb46b80ca5265be2015be93bd6850e00cd9f1465ae3b2c8ca84df1f7f3f3c35d3d52a78d4ba1452f35a1
7
+ data.tar.gz: 7e475f123accc3338aecd3a26682f814fcee8c877e00175fa8fba775aa74e375cb7ea8168a8ba373a342340be3a0f2cb277d280593f2c48f11fc73c9f2c7c29b
@@ -1 +1 @@
1
- //= require rails_admin_json_editor/vue
1
+ //= require rails_admin_json_editor/vue.0.11.4
@@ -3,43 +3,96 @@
3
3
  </script>
4
4
 
5
5
  <div ref="components_json" class="components_json">
6
+
7
+ <!-- List content -->
6
8
  <div v-repeat="components" class="component">
7
9
  <% field.components.each do |component| %>
8
- <%= render 'rails_admin_json_editor/main/form_json_editor_component', locals: { component: component } %>
10
+ <div v-if="type == '<%= component.type %>'">
11
+ <legend><%= component.label %></legend>
12
+ <%= content_tag :p, component.help, class: "help-block" unless component.help.nil? %>
13
+
14
+ <% component.fields.each do |f| %>
15
+ <div class="control-group">
16
+ <%= label_tag f.name, f.label, class: "control-label" %>
17
+
18
+ <div class="controls">
19
+ <% if f.type == :string %>
20
+ <%= text_field_tag f.name, nil, 'v-model' => "props.#{f.name}" %>
21
+ <% end %>
22
+
23
+ <% if f.type == :text %>
24
+ <%= text_area_tag f.name, nil, 'v-model' => "props.#{f.name}" %>
25
+ <% end %>
26
+
27
+ <% if f.type == :picker %>
28
+ <select v-on="change: onChangePicker($event, $index, '<%= f.name %>')" placeholder="Zoeken">
29
+ <option value=""></option>
30
+ <% f.picker_records.each do |record| %>
31
+ <option
32
+ v-attr="selected: pickerOptionIsSelected(this, '<%= f.name %>', '<%= f.picker_label %>', '<%= record.send(f.picker_label) %>')"
33
+ value="<%= record.send(f.picker_label) %>"
34
+ data-json="<%= record.to_json %>">
35
+ <%= record.send(f.picker_label) %>
36
+ </option>
37
+ <% end %>
38
+ </select>
39
+ <% end %>
40
+
41
+ <%= content_tag :p, f.help, class: "help-block" unless f.help.nil? %>
42
+ </div>
43
+ </div>
44
+ <% end %>
45
+ </div>
9
46
  <% end %>
10
47
  </div>
11
48
 
12
- <%= render 'rails_admin_json_editor/main/form_json_editor_dropdown', locals: { components: field.components } %>
49
+ <!-- Dropdown to add new content -->
50
+ <div class="dropdown">
51
+ <a class="dropdown-toggle btn btn-info" data-toggle="dropdown" href="#">Component toevoegen <b class="caret"></b></a>
13
52
 
14
- <%= form.text_area field.name, 'v-model' => 'components', cols:50, rows:10, style: 'margin-top:40px' %>
15
- </div>
53
+ <ul class="dropdown-menu">
54
+ <% field.components.each do |component| %>
55
+ <li><a href="#" v-on="click: addComponent" component-type="<%= component.type %>"><%= component.type %></a></li>
56
+ <% end %>
57
+ </ul>
58
+ </div>
16
59
 
17
- <% field.components
18
- .map(&:fields)
19
- .flatten
20
- .select { |f| f.picker_records != nil }
21
- .each do |f| %>
22
- <%= render 'rails_admin_json_editor/main/form_json_editor_picker', locals: { field:f } %>
23
- <% end %>
60
+ <!-- Hidden field to store JSON -->
61
+ <%= form.text_area field.name, 'v-model' => 'components | json', cols:50, rows:10, style: 'margin-top:40px' %>
62
+ </div>
24
63
 
25
64
  <script type="text/javascript">
26
65
  var componentsVM = new Vue({
27
66
  el: '[ref=components_json]',
28
67
  data: {
29
- components: <%= raw field.value || "[]" %>
68
+ components: <%= raw(field.value.empty? ? "[]" : field.value) %>
30
69
  },
31
70
  methods: {
32
71
  addComponent: function(e) {
33
72
  e.preventDefault();
34
73
  var type = e.target.getAttribute('component-type');
35
- this.components.push({ type:type })
74
+ this.components.push({ type:type, props:{} })
36
75
  },
37
- openPicker: function(e) {
38
- e.preventDefault();
39
- var name = e.target.getAttribute('component-name');
40
- var index = e.target.getAttribute('component-index');
41
- console.log('openPicker', name, index);
42
- recordPickers[name].show(index);
76
+ onChangePicker: function(e, index, fieldName) {
77
+ var el = e.target;
78
+ var value = el.options[el.selectedIndex].getAttribute('data-json');
79
+ var json = JSON.parse(value);
80
+
81
+ var props = {};
82
+ props[fieldName] = json;
83
+
84
+ var data = $.extend({}, componentsVM.components[index], {
85
+ props: props
86
+ });
87
+
88
+ componentsVM.components.$set(index, data)
89
+ },
90
+ pickerOptionIsSelected: function(component, fieldName, recordLabel, recordName) {
91
+ return component.$data
92
+ && component.$data.props
93
+ && component.$data.props[fieldName]
94
+ && component.$data.props[fieldName][recordLabel] == recordName
95
+ && component.$data.props[fieldName][recordLabel] == recordName;
43
96
  }
44
97
  }
45
98
  });
@@ -1,3 +1,3 @@
1
1
  module RailsAdminJsonEditor
2
- VERSION = "0.0.5"
2
+ VERSION = "0.0.6"
3
3
  end
@@ -66,6 +66,7 @@ module RailsAdmin
66
66
  class Field
67
67
  attr_accessor :name, :type
68
68
  attr_accessor :label, :help
69
+ attr_accessor :picker_label
69
70
  attr_accessor :picker_records
70
71
 
71
72
  def initialize(name, type)
@@ -82,8 +83,9 @@ module RailsAdmin
82
83
  if s.nil? then return @help else @help = s end
83
84
  end
84
85
 
85
- def picker_records(a = nil)
86
- if a.nil? then return @picker_records else @picker_records = a end
86
+ def setup_picker(label, records)
87
+ @picker_label = label
88
+ @picker_records = records
87
89
  end
88
90
  end
89
91
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rails_admin_json_editor
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.5
4
+ version: 0.0.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jasper Haggenburg
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-01-20 00:00:00.000000000 Z
11
+ date: 2015-01-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -66,11 +66,8 @@ files:
66
66
  - README.md
67
67
  - Rakefile
68
68
  - app/assets/javascripts/rails_admin_json_editor/rails_admin_json_editor.js
69
- - app/assets/javascripts/rails_admin_json_editor/vue.js
69
+ - app/assets/javascripts/rails_admin_json_editor/vue.0.11.4.js
70
70
  - app/views/rails_admin_json_editor/main/_form_json_editor.html.erb
71
- - app/views/rails_admin_json_editor/main/_form_json_editor_component.html.erb
72
- - app/views/rails_admin_json_editor/main/_form_json_editor_dropdown.html.erb
73
- - app/views/rails_admin_json_editor/main/_form_json_editor_picker.html.erb
74
71
  - lib/rails_admin_json_editor.rb
75
72
  - lib/rails_admin_json_editor/version.rb
76
73
  - rails_admin_json_editor.gemspec
@@ -1,29 +0,0 @@
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>
@@ -1,9 +0,0 @@
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>
@@ -1,52 +0,0 @@
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>