rails_admin_json_editor 0.0.5 → 0.0.6

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: 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>