populate-me 0.20.0 → 0.21.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: e3359034df211dd6eef9b9142fd38b7a96db59d0f82bf05efc29ee594dcac332
4
- data.tar.gz: e13861e7a4ea3b42e6587bf0ea492cd5ec8c0f2f3c38f8617169ad3864768152
3
+ metadata.gz: aae26b6056ce44152b109789786ed2e364c224c8b909944ccd331ce7cacb687b
4
+ data.tar.gz: 907b296590c89a4182b2ee7ebeb68db302a867f2c611d9e11f527848f4b030fa
5
5
  SHA512:
6
- metadata.gz: '08f7a97b54471d59a00f856a33190a44eecc9c0ea6e7191cc9177a52b92858d43f287b7839fcc481be04253ed1d8ccf409e14045f74892968af2cd0fe726b856'
7
- data.tar.gz: 6cbb05d6aed20c6f8cd277c5944d85c8521fc6fc6371a8f338fb0cad6b180cc8b28365e59fb75a4993d48afafbb89cc079b30a7c160e376dc3fbf347e0a6a511
6
+ metadata.gz: 7ee5f83a895efc0ce9b8a9b7ac0122e7e0ff9489cb19f2ffda038717eb4abea556dca1b1a7a369446d9fa1cad6e9bca91a511596f6c1d8de20b354d0587e6fed
7
+ data.tar.gz: c00b2f1dce9f4abf97dffb956ed5d8620eaca3b4f76d4a58885c6f45ba7efe18aa4857e000ab81fbb8e4c705ce27fb5ec8c60cd9297b9d2cb38616bc85051e82
data/README.md CHANGED
@@ -79,6 +79,7 @@ Available types are:
79
79
  - `:text` Multiline text.
80
80
  - `:boolean` Which is `true` or `false`.
81
81
  - `:select` Dropdown list of options (records a string).
82
+ - `:lnglat` Coordinates field of the form "Longitude, Latitude" with a Mapbox interface.
82
83
 
83
84
  A `:list` type exists as well for nested documents, but it is not
84
85
  fully working yet.
@@ -253,6 +253,10 @@ fieldset {
253
253
  }
254
254
  .asmListItemRemove, .asmListItemRemove:hover { color: #dc322f; }
255
255
 
256
+ .map.mapboxgl-map {
257
+ aspect-ratio: 4/3;
258
+ }
259
+
256
260
 
257
261
  /\
258
262
  / *\
@@ -214,6 +214,32 @@ PopulateMe.jsValidationsPassed = function(context) {
214
214
  return true;
215
215
  };
216
216
 
217
+ PopulateMe.lngLatRegex = /^[-+]?([0-9]*[.])?[0-9]+\s*,\s*[-+]?([0-9]*[.])?[0-9]+$/;
218
+
219
+ PopulateMe.isLngLatString = function(str) {
220
+ return typeof str === 'string' && str.match( PopulateMe.lngLatRegex );
221
+ };
222
+
223
+ PopulateMe.defaultLngLat = {
224
+ lng: -0.07820128620232675,
225
+ lat: 51.52270386882307
226
+ };
227
+
228
+ PopulateMe.parseLngLat = function(str) {
229
+ if ( !PopulateMe.isLngLatString( str ) ) {
230
+ return PopulateMe.defaultLngLat;
231
+ }
232
+ var atoms = str.split(/\s*,\s*/);
233
+ return {
234
+ lng: parseFloat( atoms[0] ),
235
+ lat: parseFloat( atoms[1] )
236
+ };
237
+ };
238
+
239
+ PopulateMe.lngLatString = function( lnglat ) {
240
+ return lnglat.lng + ', ' + lnglat.lat;
241
+ };
242
+
217
243
  // Init column
218
244
  // Bind events and init things that need to happen when
219
245
  // a new column is added to the finder.
@@ -221,7 +247,7 @@ PopulateMe.jsValidationsPassed = function(context) {
221
247
  // in case you have things to put in your custom javascript.
222
248
  PopulateMe.init_column = function(c) {
223
249
 
224
- var documents = $('.documents', c);
250
+ var documents = $('.documents', c);
225
251
 
226
252
  // Sort list item
227
253
  if (documents.data('sort-field') !== '') {
@@ -306,6 +332,42 @@ PopulateMe.init_column = function(c) {
306
332
  link.attr('href', PopulateMe.update_query_parameter(link.attr('href'), 'data[polymorphic_type]', $this.val()));
307
333
  }).change();
308
334
 
335
+ // LngLat fields
336
+ $('.lnglat-input', c).each( function( index, input ) {
337
+ var $input = $(input);
338
+ var $map = $( "<div class='map'></div>" );
339
+ $input.before( $map );
340
+ var map = new mapboxgl.Map({
341
+ container: $map.get(0),
342
+ // Choose from Mapbox's core styles, or make your own style with Mapbox Studio
343
+ style: 'mapbox://styles/mapbox/streets-v12',
344
+ center: PopulateMe.defaultLngLat,
345
+ doubleClickZoom: false,
346
+ zoom: 10
347
+ });
348
+ var marker;
349
+ var currentLngLat;
350
+ function mapReadsField( mapCenter) {
351
+ mapCenter = typeof mapCenter !== 'undefined' ? mapCenter : true;
352
+ if ( marker ) marker.remove();
353
+ if ( PopulateMe.isLngLatString( $input.val() ) ) {
354
+ currentLngLat = PopulateMe.parseLngLat( $input.val() );
355
+ marker = new mapboxgl.Marker({ color: 'black' })
356
+ .setLngLat( currentLngLat )
357
+ .addTo(map);
358
+ } else {
359
+ currentLngLat = PopulateMe.defaultLngLat;
360
+ }
361
+ if ( mapCenter ) map.setCenter( currentLngLat )
362
+ };
363
+ mapReadsField();
364
+ $input.change( mapReadsField );
365
+ map.on('click', function(e) {
366
+ $input.val( PopulateMe.lngLatString( e.lngLat ) );
367
+ mapReadsField( false );
368
+ });
369
+ });
370
+
309
371
  // Warning when date input not supported
310
372
  var dateFields = $('[type="date"]', c);
311
373
  if ( dateFields.size()>0 && dateFields.prop('type') != 'date' ) {
@@ -7,6 +7,7 @@
7
7
  <link href="<%= request.script_name %>/__assets__/img/favicon.png" rel="icon" type="image/png">
8
8
  <link rel="stylesheet" href="<%= request.script_name %>/__assets__/css/jquery-ui.min.css" type="text/css" media='screen' />
9
9
  <link rel="stylesheet" href="<%= request.script_name %>/__assets__/css/asmselect.css" type="text/css" media='screen' />
10
+ <link href="https://api.mapbox.com/mapbox-gl-js/v2.15.0/mapbox-gl.css" rel="stylesheet">
10
11
  <link rel="stylesheet" href="<%= request.script_name %>/__assets__/css/main.css" type="text/css" media='screen' />
11
12
  <% if settings.respond_to? :custom_css_url %>
12
13
  <link rel="stylesheet" href="<%= settings.custom_css_url %>" type="text/css" media='screen' />
@@ -125,7 +126,7 @@
125
126
  {{#adapted_field}}{{/adapted_field}}
126
127
  {{/wrap}}
127
128
  </script>
128
-
129
+
129
130
  <script id="template-string-field" type="x-tmpl-mustache">
130
131
  <input name='{{input_name}}' value='{{input_value}}' {{#required}}required{{/required}}{{{build_input_attributes}}} {{#autocomplete.length}}list='datalist-{{id}}'{{/autocomplete.length}} />
131
132
  {{#autocomplete.length}}
@@ -137,6 +138,10 @@
137
138
  {{/autocomplete.length}}
138
139
  </script>
139
140
 
141
+ <script id="template-lnglat-field" type="x-tmpl-mustache">
142
+ <input class='lnglat-input' name='{{input_name}}' value='{{input_value}}' {{#required}}required{{/required}}{{{build_input_attributes}}} pattern="^[-+]?([0-9]*[.])?[0-9]+\s*,\s*[-+]?([0-9]*[.])?[0-9]+$" placeholder="Longitude, Latitude" />
143
+ </script>
144
+
140
145
  <script id="template-text-field" type="x-tmpl-mustache">
141
146
  <textarea name='{{input_name}}' {{#required}}required{{/required}}{{{build_input_attributes}}}>{{input_value}}</textarea>
142
147
  </script>
@@ -197,7 +202,9 @@
197
202
  <%# <script src="<%= request.script_name %1>/__assets__/js/sortable.js" type="text/javascript" charset="utf-8"></script> %>
198
203
  <script src="<%= request.script_name %>/__assets__/js/asmselect.js" type="text/javascript" charset="utf-8"></script>
199
204
  <script src="<%= request.script_name %>/__assets__/js/quicksearch.js" type="text/javascript" charset="utf-8"></script>
205
+ <script src="https://api.mapbox.com/mapbox-gl-js/v2.15.0/mapbox-gl.js"></script>
200
206
  <script type="text/javascript">
207
+ mapboxgl.accessToken = "pk.eyJ1IjoibWlja2FlbHJpZ2EiLCJhIjoiY2xsYXA3Y25lMWIxNzNlbzY0MW1hdm15ZCJ9.bBJwnlHVNkPyF-ZKA5J6Dg";
201
208
  window.admin_path = "<%= request.script_name %>";
202
209
  window.index_path = "<%= settings.index_path %>";
203
210
  </script>
@@ -1,4 +1,4 @@
1
1
  module PopulateMe
2
- VERSION = '0.20.0'
2
+ VERSION = '0.21.0'
3
3
  end
4
4
 
@@ -99,6 +99,14 @@ describe 'PopulateMe::S3Attachment' do
99
99
  file.unlink
100
100
  end
101
101
 
102
+ it "Can have filenames with accents" do
103
+ uploaded_file = Rack::Multipart::UploadedFile.new('test/Léonidas.txt')
104
+ book = S3Book.new
105
+
106
+ attachment = book.attachment(:content)
107
+ assert_equal 'yo', attachment.next_available_filename(uploaded_file.original_filename)
108
+ end
109
+
102
110
  it "Can override the url_prefix at document class level" do
103
111
  file = Tempfile.new('foo')
104
112
  book = S3BookNoPrefix.new
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.20.0
4
+ version: 0.21.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: 2023-02-15 00:00:00.000000000 Z
11
+ date: 2023-08-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: web-utils