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.
- checksums.yaml +4 -4
- data/.github/FUNDING.yml +4 -0
- data/.travis.yml +8 -6
- data/CHANGELOG.md +15 -10
- data/Gemfile +2 -10
- data/README.md +11 -4
- data/Rakefile +3 -2
- data/alchemy_cms.gemspec +11 -2
- data/app/assets/javascripts/alchemy/alchemy.dialog.js.coffee +3 -3
- data/app/assets/javascripts/alchemy/alchemy.elements_window.js.coffee +1 -1
- data/app/assets/stylesheets/alchemy/buttons.scss +15 -2
- data/app/assets/stylesheets/alchemy/elements.scss +4 -0
- data/app/assets/stylesheets/alchemy/form_fields.scss +1 -0
- data/app/assets/stylesheets/alchemy/forms.scss +1 -0
- data/app/assets/stylesheets/alchemy/frame.scss +9 -29
- data/app/assets/stylesheets/alchemy/navigation.scss +30 -6
- data/app/assets/stylesheets/alchemy/preview_window.scss +4 -0
- data/app/controllers/alchemy/admin/elements_controller.rb +2 -2
- data/app/controllers/alchemy/pages_controller.rb +9 -4
- data/app/helpers/alchemy/elements_helper.rb +2 -2
- data/app/models/alchemy/element.rb +9 -4
- data/app/models/alchemy/page/page_elements.rb +17 -25
- data/app/models/alchemy/page/page_scopes.rb +1 -1
- data/app/models/alchemy/picture.rb +0 -21
- data/app/views/alchemy/admin/elements/_element.html.erb +2 -1
- data/app/views/alchemy/admin/pages/edit.html.erb +10 -10
- data/lib/alchemy/on_page_layout.rb +1 -1
- data/lib/alchemy/test_support/factories.rb +3 -1
- data/lib/alchemy/test_support/factories/attachment_factory.rb +2 -0
- data/lib/alchemy/test_support/factories/content_factory.rb +5 -0
- data/lib/alchemy/test_support/factories/dummy_user_factory.rb +2 -0
- data/lib/alchemy/test_support/factories/element_factory.rb +3 -0
- data/lib/alchemy/test_support/factories/essence_file_factory.rb +2 -0
- data/lib/alchemy/test_support/factories/essence_picture_factory.rb +2 -0
- data/lib/alchemy/test_support/factories/essence_text_factory.rb +2 -0
- data/lib/alchemy/test_support/factories/language_factory.rb +2 -0
- data/lib/alchemy/test_support/factories/page_factory.rb +2 -0
- data/lib/alchemy/test_support/factories/picture_factory.rb +2 -0
- data/lib/alchemy/test_support/factories/site_factory.rb +2 -0
- data/lib/alchemy/test_support/shared_uploader_examples.rb +1 -1
- data/lib/alchemy/upgrader/tasks/cells_migration.rb +2 -4
- data/lib/alchemy/upgrader/tasks/cells_upgrader.rb +2 -3
- data/lib/alchemy/upgrader/tasks/picture_gallery_upgrader.rb +4 -4
- data/lib/alchemy/version.rb +5 -1
- data/lib/alchemy_cms.rb +0 -1
- data/lib/rails/generators/alchemy/elements/templates/view.html.erb +1 -1
- data/lib/rails/generators/alchemy/elements/templates/view.html.haml +1 -1
- data/lib/rails/generators/alchemy/elements/templates/view.html.slim +1 -1
- data/vendor/assets/javascripts/fileupload/jquery.fileupload-process.js +5 -2
- data/vendor/assets/javascripts/fileupload/jquery.fileupload-validate.js +5 -2
- data/vendor/assets/javascripts/fileupload/jquery.fileupload.js +28 -8
- data/vendor/assets/javascripts/fileupload/jquery.iframe-transport.js +11 -4
- metadata +129 -12
- data/.teatro.yml +0 -8
- data/lib/alchemy/picture_attributes.rb +0 -28
data/lib/alchemy/version.rb
CHANGED
data/lib/alchemy_cms.rb
CHANGED
@@ -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'
|
@@ -6,7 +6,7 @@
|
|
6
6
|
* https://blueimp.net
|
7
7
|
*
|
8
8
|
* Licensed under the MIT license:
|
9
|
-
*
|
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(
|
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
|
-
*
|
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(
|
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
|
-
*
|
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"
|
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(
|
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
|
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
|
-
*
|
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 &&
|
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.
|
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-
|
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:
|
250
|
+
version: 5.0.0
|
251
251
|
- - "<"
|
252
252
|
- !ruby/object:Gem::Version
|
253
|
-
version: '6.
|
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:
|
260
|
+
version: 5.0.0
|
261
261
|
- - "<"
|
262
262
|
- !ruby/object:Gem::Version
|
263
|
-
version: '6.
|
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
|