alchemy_cms 4.2.4 → 4.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (55) hide show
  1. checksums.yaml +4 -4
  2. data/.github/FUNDING.yml +4 -0
  3. data/.travis.yml +8 -6
  4. data/CHANGELOG.md +15 -10
  5. data/Gemfile +2 -10
  6. data/README.md +11 -4
  7. data/Rakefile +3 -2
  8. data/alchemy_cms.gemspec +11 -2
  9. data/app/assets/javascripts/alchemy/alchemy.dialog.js.coffee +3 -3
  10. data/app/assets/javascripts/alchemy/alchemy.elements_window.js.coffee +1 -1
  11. data/app/assets/stylesheets/alchemy/buttons.scss +15 -2
  12. data/app/assets/stylesheets/alchemy/elements.scss +4 -0
  13. data/app/assets/stylesheets/alchemy/form_fields.scss +1 -0
  14. data/app/assets/stylesheets/alchemy/forms.scss +1 -0
  15. data/app/assets/stylesheets/alchemy/frame.scss +9 -29
  16. data/app/assets/stylesheets/alchemy/navigation.scss +30 -6
  17. data/app/assets/stylesheets/alchemy/preview_window.scss +4 -0
  18. data/app/controllers/alchemy/admin/elements_controller.rb +2 -2
  19. data/app/controllers/alchemy/pages_controller.rb +9 -4
  20. data/app/helpers/alchemy/elements_helper.rb +2 -2
  21. data/app/models/alchemy/element.rb +9 -4
  22. data/app/models/alchemy/page/page_elements.rb +17 -25
  23. data/app/models/alchemy/page/page_scopes.rb +1 -1
  24. data/app/models/alchemy/picture.rb +0 -21
  25. data/app/views/alchemy/admin/elements/_element.html.erb +2 -1
  26. data/app/views/alchemy/admin/pages/edit.html.erb +10 -10
  27. data/lib/alchemy/on_page_layout.rb +1 -1
  28. data/lib/alchemy/test_support/factories.rb +3 -1
  29. data/lib/alchemy/test_support/factories/attachment_factory.rb +2 -0
  30. data/lib/alchemy/test_support/factories/content_factory.rb +5 -0
  31. data/lib/alchemy/test_support/factories/dummy_user_factory.rb +2 -0
  32. data/lib/alchemy/test_support/factories/element_factory.rb +3 -0
  33. data/lib/alchemy/test_support/factories/essence_file_factory.rb +2 -0
  34. data/lib/alchemy/test_support/factories/essence_picture_factory.rb +2 -0
  35. data/lib/alchemy/test_support/factories/essence_text_factory.rb +2 -0
  36. data/lib/alchemy/test_support/factories/language_factory.rb +2 -0
  37. data/lib/alchemy/test_support/factories/page_factory.rb +2 -0
  38. data/lib/alchemy/test_support/factories/picture_factory.rb +2 -0
  39. data/lib/alchemy/test_support/factories/site_factory.rb +2 -0
  40. data/lib/alchemy/test_support/shared_uploader_examples.rb +1 -1
  41. data/lib/alchemy/upgrader/tasks/cells_migration.rb +2 -4
  42. data/lib/alchemy/upgrader/tasks/cells_upgrader.rb +2 -3
  43. data/lib/alchemy/upgrader/tasks/picture_gallery_upgrader.rb +4 -4
  44. data/lib/alchemy/version.rb +5 -1
  45. data/lib/alchemy_cms.rb +0 -1
  46. data/lib/rails/generators/alchemy/elements/templates/view.html.erb +1 -1
  47. data/lib/rails/generators/alchemy/elements/templates/view.html.haml +1 -1
  48. data/lib/rails/generators/alchemy/elements/templates/view.html.slim +1 -1
  49. data/vendor/assets/javascripts/fileupload/jquery.fileupload-process.js +5 -2
  50. data/vendor/assets/javascripts/fileupload/jquery.fileupload-validate.js +5 -2
  51. data/vendor/assets/javascripts/fileupload/jquery.fileupload.js +28 -8
  52. data/vendor/assets/javascripts/fileupload/jquery.iframe-transport.js +11 -4
  53. metadata +129 -12
  54. data/.teatro.yml +0 -8
  55. data/lib/alchemy/picture_attributes.rb +0 -28
@@ -1,9 +1,13 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Alchemy
4
- VERSION = "4.2.4"
4
+ VERSION = "4.3.0"
5
5
 
6
6
  def self.version
7
7
  VERSION
8
8
  end
9
+
10
+ def self.gem_version
11
+ Gem::Version.new(VERSION)
12
+ end
9
13
  end
@@ -48,7 +48,6 @@ require_relative 'alchemy/on_page_layout/callbacks_runner'
48
48
  require_relative 'alchemy/page_layout'
49
49
  require_relative 'alchemy/paths'
50
50
  require_relative 'alchemy/permissions'
51
- require_relative 'alchemy/picture_attributes'
52
51
  require_relative 'alchemy/sass_support'
53
52
  require_relative 'alchemy/ssl_protection'
54
53
  require_relative 'alchemy/resource'
@@ -10,7 +10,7 @@
10
10
  <%- end -%>
11
11
  <%- end -%>
12
12
  <%- if @element['nestable_elements'].present? -%>
13
- <%%= render <%= @element_name %>_view.nested_elements.available %>
13
+ <%%= render <%= @element_name %>_view.nested_elements %>
14
14
  <%- end -%>
15
15
  <%%- end -%>
16
16
  <%%- end -%>
@@ -9,5 +9,5 @@
9
9
  <%- end -%>
10
10
  <%- end -%>
11
11
  <%- if @element['nestable_elements'].present? -%>
12
- = render <%= @element_name -%>_view.nested_elements.available
12
+ = render <%= @element_name -%>_view.nested_elements
13
13
  <%- end -%>
@@ -9,5 +9,5 @@
9
9
  <%- end -%>
10
10
  <%- end -%>
11
11
  <%- if @element['nestable_elements'].present? -%>
12
- = render <%= @element_name -%>_view.nested_elements.available
12
+ = render <%= @element_name -%>_view.nested_elements
13
13
  <%- end -%>
@@ -6,7 +6,7 @@
6
6
  * https://blueimp.net
7
7
  *
8
8
  * Licensed under the MIT license:
9
- * http://www.opensource.org/licenses/MIT
9
+ * https://opensource.org/licenses/MIT
10
10
  */
11
11
 
12
12
  /* jshint nomen:false */
@@ -22,7 +22,10 @@
22
22
  ], factory);
23
23
  } else if (typeof exports === 'object') {
24
24
  // Node/CommonJS:
25
- factory(require('jquery'));
25
+ factory(
26
+ require('jquery'),
27
+ require('./jquery.fileupload')
28
+ );
26
29
  } else {
27
30
  // Browser globals:
28
31
  factory(
@@ -6,7 +6,7 @@
6
6
  * https://blueimp.net
7
7
  *
8
8
  * Licensed under the MIT license:
9
- * http://www.opensource.org/licenses/MIT
9
+ * https://opensource.org/licenses/MIT
10
10
  */
11
11
 
12
12
  /* global define, require, window */
@@ -21,7 +21,10 @@
21
21
  ], factory);
22
22
  } else if (typeof exports === 'object') {
23
23
  // Node/CommonJS:
24
- factory(require('jquery'));
24
+ factory(
25
+ require('jquery'),
26
+ require('./jquery.fileupload-process')
27
+ );
25
28
  } else {
26
29
  // Browser globals:
27
30
  factory(
@@ -6,7 +6,7 @@
6
6
  * https://blueimp.net
7
7
  *
8
8
  * Licensed under the MIT license:
9
- * http://www.opensource.org/licenses/MIT
9
+ * https://opensource.org/licenses/MIT
10
10
  */
11
11
 
12
12
  /* jshint nomen:false */
@@ -18,7 +18,7 @@
18
18
  // Register as an anonymous AMD module:
19
19
  define([
20
20
  'jquery',
21
- 'jquery-ui/widget'
21
+ 'jquery-ui/ui/widget'
22
22
  ], factory);
23
23
  } else if (typeof exports === 'object') {
24
24
  // Node/CommonJS:
@@ -43,7 +43,7 @@
43
43
  '|(Kindle/(1\\.0|2\\.[05]|3\\.0))'
44
44
  ).test(window.navigator.userAgent) ||
45
45
  // Feature detection for all other devices:
46
- $('<input type="file">').prop('disabled'));
46
+ $('<input type="file"/>').prop('disabled'));
47
47
 
48
48
  // The FileReader API is not actually used, but works as feature detection,
49
49
  // as some Safari versions (5?) support XHR file uploads via the FormData API,
@@ -261,6 +261,9 @@
261
261
  // Callback for dragover events of the dropZone(s):
262
262
  // dragover: function (e) {}, // .bind('fileuploaddragover', func);
263
263
 
264
+ // Callback before the start of each chunk upload request (before form data initialization):
265
+ // chunkbeforesend: function (e, data) {}, // .bind('fileuploadchunkbeforesend', func);
266
+
264
267
  // Callback for the start of each chunk upload request:
265
268
  // chunksend: function (e, data) {}, // .bind('fileuploadchunksend', func);
266
269
 
@@ -434,6 +437,13 @@
434
437
  }
435
438
  },
436
439
 
440
+ _deinitProgressListener: function (options) {
441
+ var xhr = options.xhr ? options.xhr() : $.ajaxSettings.xhr();
442
+ if (xhr.upload) {
443
+ $(xhr.upload).unbind('progress');
444
+ }
445
+ },
446
+
437
447
  _isInstanceOf: function (type, obj) {
438
448
  // Cross-frame instanceof check
439
449
  return Object.prototype.toString.call(obj) === '[object ' + type + ']';
@@ -453,7 +463,7 @@
453
463
  }
454
464
  if (!multipart || options.blob || !this._isInstanceOf('File', file)) {
455
465
  options.headers['Content-Disposition'] = 'attachment; filename="' +
456
- encodeURI(file.name) + '"';
466
+ encodeURI(file.uploadName || file.name) + '"';
457
467
  }
458
468
  if (!multipart) {
459
469
  options.contentType = file.type || 'application/octet-stream';
@@ -489,7 +499,11 @@
489
499
  });
490
500
  }
491
501
  if (options.blob) {
492
- formData.append(paramName, options.blob, file.name);
502
+ formData.append(
503
+ paramName,
504
+ options.blob,
505
+ file.uploadName || file.name
506
+ );
493
507
  } else {
494
508
  $.each(options.files, function (index, file) {
495
509
  // This check allows the tests to run with
@@ -730,7 +744,7 @@
730
744
  promise = dfd.promise(),
731
745
  jqXHR,
732
746
  upload;
733
- if (!(this._isXHRUpload(options) && slice && (ub || mcs < fs)) ||
747
+ if (!(this._isXHRUpload(options) && slice && (ub || ($.type(mcs) === 'function' ? mcs(options) : mcs) < fs)) ||
734
748
  options.data) {
735
749
  return false;
736
750
  }
@@ -753,7 +767,7 @@
753
767
  o.blob = slice.call(
754
768
  file,
755
769
  ub,
756
- ub + mcs,
770
+ ub + ($.type(mcs) === 'function' ? mcs(o) : mcs),
757
771
  file.type
758
772
  );
759
773
  // Store the current chunk size, as the blob itself
@@ -762,6 +776,8 @@
762
776
  // Expose the chunk bytes position range:
763
777
  o.contentRange = 'bytes ' + ub + '-' +
764
778
  (ub + o.chunkSize - 1) + '/' + fs;
779
+ // Trigger chunkbeforesend to allow form data to be updated for this chunk
780
+ that._trigger('chunkbeforesend', null, o);
765
781
  // Process the upload data (the blob and potential form data):
766
782
  that._initXHRData(o);
767
783
  // Add progress listeners for this chunk upload:
@@ -808,6 +824,9 @@
808
824
  o.context,
809
825
  [jqXHR, textStatus, errorThrown]
810
826
  );
827
+ })
828
+ .always(function () {
829
+ that._deinitProgressListener(o);
811
830
  });
812
831
  };
813
832
  this._enhancePromise(promise);
@@ -909,6 +928,7 @@
909
928
  }).fail(function (jqXHR, textStatus, errorThrown) {
910
929
  that._onFail(jqXHR, textStatus, errorThrown, options);
911
930
  }).always(function (jqXHRorResult, textStatus, jqXHRorError) {
931
+ that._deinitProgressListener(options);
912
932
  that._onAlways(
913
933
  jqXHRorResult,
914
934
  textStatus,
@@ -1126,7 +1146,7 @@
1126
1146
  dirReader = entry.createReader();
1127
1147
  readEntries();
1128
1148
  } else {
1129
- // Return an empy list for file system items
1149
+ // Return an empty list for file system items
1130
1150
  // other than files or directories:
1131
1151
  dfd.resolve([]);
1132
1152
  }
@@ -6,10 +6,10 @@
6
6
  * https://blueimp.net
7
7
  *
8
8
  * Licensed under the MIT license:
9
- * http://www.opensource.org/licenses/MIT
9
+ * https://opensource.org/licenses/MIT
10
10
  */
11
11
 
12
- /* global define, require, window, document */
12
+ /* global define, require, window, document, JSON */
13
13
 
14
14
  ;(function (factory) {
15
15
  'use strict';
@@ -27,7 +27,14 @@
27
27
  'use strict';
28
28
 
29
29
  // Helper variable to create unique names for the transport iframes:
30
- var counter = 0;
30
+ var counter = 0,
31
+ jsonAPI = $,
32
+ jsonParse = 'parseJSON';
33
+
34
+ if ('JSON' in window && 'parse' in JSON) {
35
+ jsonAPI = JSON;
36
+ jsonParse = 'parse';
37
+ }
31
38
 
32
39
  // The iframe transport accepts four additional options:
33
40
  // options.fileInput: a jQuery collection of file input fields
@@ -197,7 +204,7 @@
197
204
  return iframe && $(iframe[0].body).text();
198
205
  },
199
206
  'iframe json': function (iframe) {
200
- return iframe && $.parseJSON($(iframe[0].body).text());
207
+ return iframe && jsonAPI[jsonParse]($(iframe[0].body).text());
201
208
  },
202
209
  'iframe html': function (iframe) {
203
210
  return iframe && $(iframe[0].body).html();
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: alchemy_cms
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.2.4
4
+ version: 4.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Thomas von Deyen
@@ -13,7 +13,7 @@ authors:
13
13
  autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
- date: 2019-09-27 00:00:00.000000000 Z
16
+ date: 2019-08-23 00:00:00.000000000 Z
17
17
  dependencies:
18
18
  - !ruby/object:Gem::Dependency
19
19
  name: active_model_serializers
@@ -245,22 +245,22 @@ dependencies:
245
245
  name: rails
246
246
  requirement: !ruby/object:Gem::Requirement
247
247
  requirements:
248
- - - "~>"
248
+ - - ">="
249
249
  - !ruby/object:Gem::Version
250
- version: '5.0'
250
+ version: 5.0.0
251
251
  - - "<"
252
252
  - !ruby/object:Gem::Version
253
- version: '6.0'
253
+ version: '6.1'
254
254
  type: :runtime
255
255
  prerelease: false
256
256
  version_requirements: !ruby/object:Gem::Requirement
257
257
  requirements:
258
- - - "~>"
258
+ - - ">="
259
259
  - !ruby/object:Gem::Version
260
- version: '5.0'
260
+ version: 5.0.0
261
261
  - - "<"
262
262
  - !ruby/object:Gem::Version
263
- version: '6.0'
263
+ version: '6.1'
264
264
  - !ruby/object:Gem::Dependency
265
265
  name: ransack
266
266
  requirement: !ruby/object:Gem::Requirement
@@ -299,16 +299,22 @@ dependencies:
299
299
  name: responders
300
300
  requirement: !ruby/object:Gem::Requirement
301
301
  requirements:
302
- - - "~>"
302
+ - - ">="
303
303
  - !ruby/object:Gem::Version
304
304
  version: '2.0'
305
+ - - "<"
306
+ - !ruby/object:Gem::Version
307
+ version: '4.0'
305
308
  type: :runtime
306
309
  prerelease: false
307
310
  version_requirements: !ruby/object:Gem::Requirement
308
311
  requirements:
309
- - - "~>"
312
+ - - ">="
310
313
  - !ruby/object:Gem::Version
311
314
  version: '2.0'
315
+ - - "<"
316
+ - !ruby/object:Gem::Version
317
+ version: '4.0'
312
318
  - !ruby/object:Gem::Dependency
313
319
  name: select2-rails
314
320
  requirement: !ruby/object:Gem::Requirement
@@ -357,6 +363,118 @@ dependencies:
357
363
  - - ">="
358
364
  - !ruby/object:Gem::Version
359
365
  version: '2.5'
366
+ - !ruby/object:Gem::Dependency
367
+ name: capybara
368
+ requirement: !ruby/object:Gem::Requirement
369
+ requirements:
370
+ - - "~>"
371
+ - !ruby/object:Gem::Version
372
+ version: '3.0'
373
+ type: :development
374
+ prerelease: false
375
+ version_requirements: !ruby/object:Gem::Requirement
376
+ requirements:
377
+ - - "~>"
378
+ - !ruby/object:Gem::Version
379
+ version: '3.0'
380
+ - !ruby/object:Gem::Dependency
381
+ name: capybara-screenshot
382
+ requirement: !ruby/object:Gem::Requirement
383
+ requirements:
384
+ - - "~>"
385
+ - !ruby/object:Gem::Version
386
+ version: '1.0'
387
+ type: :development
388
+ prerelease: false
389
+ version_requirements: !ruby/object:Gem::Requirement
390
+ requirements:
391
+ - - "~>"
392
+ - !ruby/object:Gem::Version
393
+ version: '1.0'
394
+ - !ruby/object:Gem::Dependency
395
+ name: factory_bot_rails
396
+ requirement: !ruby/object:Gem::Requirement
397
+ requirements:
398
+ - - "~>"
399
+ - !ruby/object:Gem::Version
400
+ version: '5.0'
401
+ type: :development
402
+ prerelease: false
403
+ version_requirements: !ruby/object:Gem::Requirement
404
+ requirements:
405
+ - - "~>"
406
+ - !ruby/object:Gem::Version
407
+ version: '5.0'
408
+ - !ruby/object:Gem::Dependency
409
+ name: rails-controller-testing
410
+ requirement: !ruby/object:Gem::Requirement
411
+ requirements:
412
+ - - "~>"
413
+ - !ruby/object:Gem::Version
414
+ version: '1.0'
415
+ type: :development
416
+ prerelease: false
417
+ version_requirements: !ruby/object:Gem::Requirement
418
+ requirements:
419
+ - - "~>"
420
+ - !ruby/object:Gem::Version
421
+ version: '1.0'
422
+ - !ruby/object:Gem::Dependency
423
+ name: rspec-activemodel-mocks
424
+ requirement: !ruby/object:Gem::Requirement
425
+ requirements:
426
+ - - "~>"
427
+ - !ruby/object:Gem::Version
428
+ version: '1.0'
429
+ type: :development
430
+ prerelease: false
431
+ version_requirements: !ruby/object:Gem::Requirement
432
+ requirements:
433
+ - - "~>"
434
+ - !ruby/object:Gem::Version
435
+ version: '1.0'
436
+ - !ruby/object:Gem::Dependency
437
+ name: rspec-rails
438
+ requirement: !ruby/object:Gem::Requirement
439
+ requirements:
440
+ - - ">="
441
+ - !ruby/object:Gem::Version
442
+ version: 4.0.0.beta2
443
+ type: :development
444
+ prerelease: false
445
+ version_requirements: !ruby/object:Gem::Requirement
446
+ requirements:
447
+ - - ">="
448
+ - !ruby/object:Gem::Version
449
+ version: 4.0.0.beta2
450
+ - !ruby/object:Gem::Dependency
451
+ name: selenium-webdriver
452
+ requirement: !ruby/object:Gem::Requirement
453
+ requirements:
454
+ - - "~>"
455
+ - !ruby/object:Gem::Version
456
+ version: '3.8'
457
+ type: :development
458
+ prerelease: false
459
+ version_requirements: !ruby/object:Gem::Requirement
460
+ requirements:
461
+ - - "~>"
462
+ - !ruby/object:Gem::Version
463
+ version: '3.8'
464
+ - !ruby/object:Gem::Dependency
465
+ name: shoulda-matchers
466
+ requirement: !ruby/object:Gem::Requirement
467
+ requirements:
468
+ - - "~>"
469
+ - !ruby/object:Gem::Version
470
+ version: '4.0'
471
+ type: :development
472
+ prerelease: false
473
+ version_requirements: !ruby/object:Gem::Requirement
474
+ requirements:
475
+ - - "~>"
476
+ - !ruby/object:Gem::Version
477
+ version: '4.0'
360
478
  description: Alchemy is a powerful, userfriendly and flexible Rails 5 CMS.
361
479
  email:
362
480
  - alchemy@magiclabs.de
@@ -366,6 +484,7 @@ extra_rdoc_files: []
366
484
  files:
367
485
  - ".codeclimate.yml"
368
486
  - ".editorconfig"
487
+ - ".github/FUNDING.yml"
369
488
  - ".github/ISSUE_TEMPLATE/Bug_report.md"
370
489
  - ".github/ISSUE_TEMPLATE/Feature_request.md"
371
490
  - ".gitignore"
@@ -373,7 +492,6 @@ files:
373
492
  - ".localeapp/config.rb"
374
493
  - ".rspec"
375
494
  - ".rubocop.yml"
376
- - ".teatro.yml"
377
495
  - ".travis.yml"
378
496
  - ".yardopts"
379
497
  - CHANGELOG.md
@@ -838,7 +956,6 @@ files:
838
956
  - lib/alchemy/page_layout.rb
839
957
  - lib/alchemy/paths.rb
840
958
  - lib/alchemy/permissions.rb
841
- - lib/alchemy/picture_attributes.rb
842
959
  - lib/alchemy/resource.rb
843
960
  - lib/alchemy/resources_helper.rb
844
961
  - lib/alchemy/routing_constraints.rb