populate-me 0.10.1 → 0.11.0

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
  SHA256:
3
- metadata.gz: 87883ab18f9a959d6daf5cad99481133789cff2885c591fb40f949706d107791
4
- data.tar.gz: c8940abefcdc04241dccd0e27eef54f8685c45b57e5e6ea5eeb32392657dcf0d
3
+ metadata.gz: faa748585887ab4c87b9a96b0fcbc1cb819933840e5ed916a3455ea677c10ada
4
+ data.tar.gz: '0548e4f13d04c8f9a5375029fc11e6cfdd00b7759b2a6b5ba171151640ee5159'
5
5
  SHA512:
6
- metadata.gz: 5355320979fd0a372e4b9ce52fd02a1de06d7fb2ca5308f863c18ce649e5f16cf21c4e9f0f2553165fdbece27dc08fbab5e5549381755c1fcf8cba7dc2d5dd5e
7
- data.tar.gz: 50bb43b8ff626e5d3a1232bc46f44f19ec126e23f3ceb3150d88ad1bdef3b7ea1cd19fc69ea1735c3920a741ffb80a11405ebf059c59a0ecbba8f2f83c2e7f64
6
+ metadata.gz: 3244bbeb680e2d0ffea098719cc228623115666b498330651563672455c2495cfd3955270943f4b0020fc54780e876dd644a9025b0ff7f325eb016586f75cc8f
7
+ data.tar.gz: 3489e40c4e16e1b75c005d09937c535de3eef8d52edf8de9b1aa54a43d71a7a8304a7e80ebaaec2486da4b344b28752b1451f82e224f2014cc00d74a0e417118
@@ -195,6 +195,30 @@ PopulateMe.init_column = function(c) {
195
195
  // Init multiple select with asmSelect
196
196
  $('select[multiple]', c).asmSelect({ sortable: true, removeLabel: '×' });
197
197
 
198
+ // Select with preview
199
+ $('select:not([multiple])', c).change(function() {
200
+ var $this = $(this);
201
+ var container;
202
+ if ($this.data('preview-container')) {
203
+ container = $($this.data('preview-container'), c);
204
+ } else {
205
+ container = $this.next('.preview-container');
206
+ }
207
+ if (container.size() == 0) return;
208
+ var path = $this.find(':selected:first').data('preview');
209
+ if (path) {
210
+ var img = container.find('img:first');
211
+ if (img.size() < 1) {
212
+ img = $("<img src='' alt='Preview' title='Preview' width='250' />");
213
+ container.html(img);
214
+ }
215
+ img.attr('src', path);
216
+ } else {
217
+ container.html('');
218
+ }
219
+ });
220
+ $('option:selected[data-preview]').parent().change();
221
+
198
222
  // Polymorphic selector
199
223
  $('select.polymorphic_type_values').change(function() {
200
224
  var $this = $(this);
@@ -134,9 +134,10 @@
134
134
  {{/multiple}}
135
135
  <select name='{{input_name}}' {{#multiple}}multiple title='?'{{/multiple}}{{{build_input_attributes}}}>
136
136
  {{#select_options}}
137
- <option value='{{value}}' {{#selected}}selected{{/selected}}>{{description}}</option>
137
+ <option value='{{value}}' {{#selected}}selected{{/selected}} {{#preview_uri}}data-preview='{{preview_uri}}'{{/preview_uri}}>{{description}}</option>
138
138
  {{/select_options}}
139
139
  </select>
140
+ <div class='preview-container'></div>
140
141
  </script>
141
142
 
142
143
  <script id="template-attachment-field" type="x-tmpl-mustache">
@@ -160,13 +160,20 @@ module PopulateMe
160
160
 
161
161
  def to_select_options o={}
162
162
  proc do
163
- items = self.admin_find(query: (o[:query]||{}), fields: [self.id_string_key, self.label_field])
163
+ items = self.admin_find({
164
+ query: (o[:query]||{}),
165
+ fields: [self.id_string_key, self.label_field, self.admin_image_field].compact.uniq
166
+ })
164
167
  output = items.sort_by do |i|
165
168
  i.to_s.downcase
166
169
  end.map do |i|
167
- [i.to_s, i.id]
170
+ item = { description: i.to_s, value: i.id }
171
+ unless self.admin_image_field.nil?
172
+ item.merge! preview_uri: i.admin_image_url
173
+ end
174
+ item
168
175
  end
169
- output.unshift(['?','']) if o[:allow_empty]
176
+ output.unshift(description: '?', value: '') if o[:allow_empty]
170
177
  output
171
178
  end
172
179
  end
@@ -1,4 +1,4 @@
1
1
  module PopulateMe
2
- VERSION = '0.10.1'
2
+ VERSION = '0.11.0'
3
3
  end
4
4
 
@@ -124,6 +124,10 @@ describe PopulateMe::Admin do
124
124
 
125
125
  describe 'Handlers' do
126
126
 
127
+ let(:help_item) {
128
+ { 'title' => '?', 'href' => '/help', 'new_page' => false }
129
+ }
130
+
127
131
  describe '/menu' do
128
132
 
129
133
  describe 'when url is root' do
@@ -133,18 +137,22 @@ describe PopulateMe::Admin do
133
137
  assert_json last_response
134
138
  assert_for_view json, 'template_menu', 'Menu'
135
139
  expected_h = {
136
- 'title'=> 'Home Details', 'href'=> '/admin/form/home-details/0'
140
+ 'title' => 'Home Details',
141
+ 'href' => '/admin/form/home-details/0',
142
+ 'new_page' => false
137
143
  }
138
144
  assert_equal expected_h, json['items'][0]
139
145
  expected_h = {
140
- 'title'=> 'Project Page', 'href'=> '/menu/project-page'
146
+ 'title' => 'Project Page',
147
+ 'href' => '/menu/project-page',
148
+ 'new_page' => false
141
149
  }
142
150
  assert_equal expected_h, json['items'][1]
143
151
  end
144
152
  it 'Adds help link' do
145
153
  get '/menu'
146
154
  assert_equal 3, json['items'].size
147
- assert_equal({'title'=>'?', 'href'=>'/help'}, json['items'].last)
155
+ assert_equal(help_item, json['items'].last)
148
156
  end
149
157
  end
150
158
  describe 'when url is nested' do
@@ -155,13 +163,15 @@ describe PopulateMe::Admin do
155
163
  assert_for_view json, 'template_menu', 'Checks'
156
164
  assert_equal 2, json['items'].size
157
165
  expected_h = {
158
- 'title'=> 'Check 1', 'href'=> '/check/1'
166
+ 'title' => 'Check 1',
167
+ 'href' => '/check/1',
168
+ 'new_page' => false
159
169
  }
160
170
  assert_equal expected_h, json['items'][0]
161
171
  end
162
172
  it 'Does not add help link' do
163
173
  get '/menu/project-page/checks'
164
- refute_equal({'title'=>'?', 'href'=>'/help'}, json['items'].last)
174
+ refute_equal(help_item, json['items'].last)
165
175
  end
166
176
  end
167
177
 
@@ -11,6 +11,11 @@ class Outcasted < PopulateMe::Document
11
11
  {description: 'medium', value: 'm'},
12
12
  {description: 'large', value: 'l'}
13
13
  ]
14
+ field :availability, type: :select, select_options: [
15
+ {description: 'Available', value: 'yes', preview_uri: 'http://www.example.org/yes.jpg' },
16
+ {description: 'On offer', value: 'almost', preview_uri: 'http://www.example.org/almost.jpg' },
17
+ {description: 'Sold', value: 'no', preview_uri: 'http://www.example.org/no.jpg' }
18
+ ]
14
19
  field :tags, type: :select, select_options: ['art','sport','science'], multiple: true
15
20
  field :related_properties, type: :select, select_options: ['prop1','prop2','prop3'], multiple: true
16
21
  field :pdf, type: :attachment
@@ -98,6 +103,17 @@ describe PopulateMe::Document, 'Outcasting' do
98
103
  formated_options?(original, output)
99
104
  end
100
105
 
106
+ it 'Can have more fields when they are already formated' do
107
+ # Mainly for adding a preview_uri but also future tweaks
108
+ original = Outcasted.fields[:availability]
109
+ output = Outcasted.new.outcast(:availability, original, {input_name_prefix: 'data'})
110
+ assert(output[:select_options].all?{|o| o.key?(:preview_uri)})
111
+ last = output[:select_options].last
112
+ assert_equal 'Sold', last[:description]
113
+ assert_equal 'no', last[:value]
114
+ assert_equal 'http://www.example.org/no.jpg', last[:preview_uri]
115
+ end
116
+
101
117
  it 'Formats the options when it is a 2 strings array' do
102
118
  original = Outcasted.fields[:size].dup
103
119
  original[:select_options] = [
@@ -85,12 +85,22 @@ describe PopulateMe::Document, 'Schema' do
85
85
  label :slug
86
86
  end
87
87
 
88
+ class Selectpreviewable < PopulateMe::Document
89
+ set :default_attachment_class, PopulateMe::Attachment
90
+ field :name
91
+ field :img, type: :attachment, variations: [
92
+ PopulateMe::Variation.default
93
+ ]
94
+ end
95
+
88
96
  before do
89
97
  Selectoptionable.documents = []
90
98
  Selectoptionable.new(id: '1', name: 'Joe', slug: 'joe').save
91
99
  Selectoptionable.new(id: '2', name: 'William', slug: 'william').save
92
100
  Selectoptionable.new(id: '3', name: 'Jack', slug: 'jack').save
93
101
  Selectoptionable.new(id: '4', name: 'Averell', slug: 'averell').save
102
+ Selectpreviewable.documents = []
103
+ Selectpreviewable.new(id: '1', name: 'Project', img: 'project.jpg').save
94
104
  end
95
105
 
96
106
  after do
@@ -102,19 +112,27 @@ describe PopulateMe::Document, 'Schema' do
102
112
  assert output_proc.is_a?(Proc)
103
113
  output = output_proc.call
104
114
  assert_equal 4, output.size
105
- assert output.all?{|o| o.is_a?(Array) and o.size==2}
106
- assert_equal '1', output.find{|o|o[0]=='joe'}[1]
115
+ assert output.all?{|o| o.is_a?(Hash) and o.size==2}
116
+ assert_equal '1', output.find{|o|o.fetch(:description)=='joe'}.fetch(:value)
107
117
  end
108
118
 
109
119
  it 'Puts items in alphabetical order of their label' do
110
120
  output= Selectoptionable.to_select_options.call
111
- assert_equal ['averell', '4'], output[0]
121
+ assert_equal({description: 'averell', value: '4'}, output[0])
112
122
  end
113
123
 
114
124
  it 'Has an option for prepending empty choice' do
115
125
  output= Selectoptionable.to_select_options(allow_empty: true).call
116
- assert_equal ['?', ''], output[0]
117
- assert_equal ['averell', '4'], output[1]
126
+ assert_equal({description: '?', value: ''}, output[0])
127
+ assert_equal({description: 'averell', value: '4'}, output[1])
128
+ end
129
+
130
+ it 'Adds a :preview_uri when there is a thumbnail' do
131
+ output= Selectpreviewable.to_select_options.call
132
+ assert output[0].key?(:preview_uri)
133
+ assert_equal 'Project', output[0][:description]
134
+ assert_equal '1', output[0][:value]
135
+ assert_equal '/attachment/selectpreviewable/project.populate_me_thumb.jpg', output[0][:preview_uri]
118
136
  end
119
137
 
120
138
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: populate-me
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.10.1
4
+ version: 0.11.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mickael Riga
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-06-08 00:00:00.000000000 Z
11
+ date: 2020-07-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: web-utils