alchemy_cms 2.1.beta5 → 2.1.beta6
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.
- data/Gemfile +1 -1
- data/README.md +14 -0
- data/alchemy_cms.gemspec +1 -1
- data/app/assets/javascripts/alchemy/alchemy.base.js +8 -2
- data/app/assets/javascripts/alchemy/alchemy.dragndrop.js.erb +1 -1
- data/app/assets/javascripts/alchemy/alchemy.link_overlay.js +1 -10
- data/app/assets/javascripts/alchemy/alchemy.routes.js.erb +9 -9
- data/app/assets/stylesheets/alchemy/base.css.scss +68 -66
- data/app/assets/stylesheets/alchemy/elements.css.scss +3 -2
- data/app/assets/stylesheets/alchemy/jquery-ui.alchemy.css.scss +1 -1
- data/app/assets/stylesheets/alchemy/jquery.Jcrop.css.scss +1 -1
- data/app/assets/stylesheets/alchemy/jquery.sb.css.scss +1 -1
- data/app/assets/stylesheets/alchemy/tinymce_content.css.scss +1 -1
- data/app/assets/stylesheets/alchemy/tinymce_dialog.css.scss +1 -1
- data/app/controllers/alchemy/admin/base_controller.rb +1 -1
- data/app/controllers/alchemy/admin/contents_controller.rb +1 -1
- data/app/controllers/alchemy/admin/elements_controller.rb +2 -1
- data/app/controllers/alchemy/admin/pages_controller.rb +18 -8
- data/app/controllers/alchemy/admin/resources_controller.rb +1 -1
- data/app/controllers/alchemy/pages_controller.rb +14 -2
- data/app/helpers/alchemy/admin/base_helper.rb +2 -2
- data/app/helpers/alchemy/admin/elements_helper.rb +1 -1
- data/app/helpers/alchemy/admin/essences_helper.rb +1 -1
- data/app/helpers/alchemy/base_helper.rb +0 -8
- data/app/helpers/alchemy/essences_helper.rb +1 -2
- data/app/helpers/alchemy/pages_helper.rb +3 -3
- data/app/models/alchemy/content.rb +27 -3
- data/app/models/alchemy/element.rb +2 -2
- data/app/models/alchemy/page.rb +4 -4
- data/app/models/alchemy/user.rb +5 -1
- data/app/views/alchemy/admin/clipboard/insert.js.erb +9 -9
- data/app/views/alchemy/admin/dashboard/index.html.erb +1 -1
- data/app/views/alchemy/admin/elements/create.js.erb +26 -19
- data/app/views/alchemy/admin/essence_pictures/assign.js.erb +1 -1
- data/app/views/alchemy/admin/essence_pictures/edit.html.erb +4 -4
- data/app/views/alchemy/admin/essence_pictures/update.js.erb +1 -1
- data/app/views/alchemy/admin/layoutpages/index.html.erb +1 -14
- data/app/views/alchemy/admin/pages/_external_link.html.erb +3 -13
- data/app/views/alchemy/admin/pages/index.html.erb +1 -14
- data/app/views/alchemy/admin/partials/_language_tree_select.html.erb +22 -0
- data/app/views/alchemy/admin/partials/_pagination_links.html.erb +3 -1
- data/app/views/alchemy/admin/pictures/update.js.erb +2 -0
- data/app/views/alchemy/admin/trash/index.html.erb +1 -1
- data/app/views/alchemy/admin/users/_user.html.erb +1 -1
- data/config/locales/alchemy.de.yml +29 -17
- data/config/locales/alchemy.en.yml +5 -4
- data/lib/alchemy/capistrano.rb +5 -0
- data/lib/alchemy/i18n.rb +1 -1
- data/lib/alchemy/page_layout.rb +1 -1
- data/lib/alchemy/scoped_pagination_link_renderer.rb +27 -0
- data/lib/alchemy/version.rb +1 -1
- data/lib/alchemy_cms.rb +1 -1
- data/spec/controllers/admin/contents_controller_spec.rb +19 -0
- data/spec/controllers/admin/pages_controller_spec.rb +19 -0
- data/spec/controllers/base_controller_spec.rb +1 -1
- data/spec/controllers/pages_controller_spec.rb +62 -0
- data/spec/dummy/app/views/layouts/.gitkeep +0 -0
- data/spec/integration/admin/pages_controller_spec.rb +42 -13
- data/spec/integration/pages_controller_spec.rb +2 -2
- data/spec/models/content_spec.rb +40 -0
- data/spec/models/element_spec.rb +50 -0
- data/spec/models/page_spec.rb +45 -1
- data/spec/routing_spec.rb +27 -29
- data/spec/spec_helper.rb +2 -2
- metadata +40 -36
- data/spec/dummy/app/views/layouts/application.html.erb +0 -14
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -76,6 +76,20 @@ Start the local server:
|
|
76
76
|
|
77
77
|
Then just switch to your browser and open `http://localhost:3000`
|
78
78
|
|
79
|
+
Upgrading
|
80
|
+
------------
|
81
|
+
|
82
|
+
Projects running with Alchemy CMS version < 2.1 needs to be upgraded.
|
83
|
+
|
84
|
+
Otherwise errors will be raised like this:
|
85
|
+
`uninitialized constant EssenceText`
|
86
|
+
|
87
|
+
You have to use the following Upgrade-Task.
|
88
|
+
Run in terminal:
|
89
|
+
|
90
|
+
rake alchemy:upgrade
|
91
|
+
|
92
|
+
|
79
93
|
Add to existing Rails project
|
80
94
|
-----------------------------
|
81
95
|
|
data/alchemy_cms.gemspec
CHANGED
@@ -30,7 +30,7 @@ Gem::Specification.new do |s|
|
|
30
30
|
s.add_runtime_dependency(%q<magiclabs-userstamp>, ["~> 2.0.2"])
|
31
31
|
s.add_runtime_dependency(%q<dynamic_form>, ["~> 1.1"])
|
32
32
|
s.add_runtime_dependency(%q<jquery-rails>, ["~> 1.0.16"])
|
33
|
-
s.add_runtime_dependency(%q<attachment_magic>, ["~> 0.2"])
|
33
|
+
s.add_runtime_dependency(%q<attachment_magic>, ["~> 0.2.1"])
|
34
34
|
|
35
35
|
s.add_development_dependency(%q<rspec-rails>, ["~> 2.7"])
|
36
36
|
s.add_development_dependency(%q<sqlite3>)
|
@@ -27,7 +27,8 @@ if (typeof(Alchemy) === 'undefined') {
|
|
27
27
|
url: Alchemy.routes.admin_picture_path(id),
|
28
28
|
type: 'PUT',
|
29
29
|
data: {
|
30
|
-
name: value
|
30
|
+
name: value,
|
31
|
+
size: Alchemy.getUrlParam('size')
|
31
32
|
}
|
32
33
|
});
|
33
34
|
return false;
|
@@ -211,8 +212,13 @@ if (typeof(Alchemy) === 'undefined') {
|
|
211
212
|
console.debug(e);
|
212
213
|
console.trace();
|
213
214
|
}
|
215
|
+
},
|
216
|
+
|
217
|
+
getUrlParam : function(name){
|
218
|
+
var results = new RegExp('[\\?&]' + name + '=([^&#]*)').exec(window.location.href);
|
219
|
+
return results[1] || 0;
|
214
220
|
}
|
215
|
-
|
221
|
+
|
216
222
|
});
|
217
223
|
|
218
224
|
})(jQuery);
|
@@ -71,7 +71,7 @@ if (typeof(Alchemy) === 'undefined') {
|
|
71
71
|
tolerance: 'pointer',
|
72
72
|
containment: 'parent',
|
73
73
|
update: function(event, ui) {
|
74
|
-
var ids = $.map($(
|
74
|
+
var ids = $.map($(this).children('div.dragable_picture'), function (child) {
|
75
75
|
return child.id.replace(/essence_picture_/, '');
|
76
76
|
});
|
77
77
|
$(event.originalTarget).css("cursor", "progress");
|
@@ -144,16 +144,7 @@ if (typeof(Alchemy) === 'undefined') {
|
|
144
144
|
// Handling an external link.
|
145
145
|
if (link.className == 'external') {
|
146
146
|
$('#overlay_tabs').tabs("select", '#overlay_tab_external_link');
|
147
|
-
|
148
|
-
$('#url_protocol option').map(function() {
|
149
|
-
protocols.push($(this).attr('value'));
|
150
|
-
});
|
151
|
-
$(protocols).each(function(index, value) {
|
152
|
-
if (link.href.beginsWith(value)) {
|
153
|
-
$('#external_url').val(link.href.replace(value, ""));
|
154
|
-
$('#url_protocol').val(value);
|
155
|
-
}
|
156
|
-
});
|
147
|
+
$('#external_url').val(link.href);
|
157
148
|
}
|
158
149
|
|
159
150
|
// Handling a file link.
|
@@ -1,6 +1,6 @@
|
|
1
1
|
// This object provides dynamically generated Rails routes in Javascript.
|
2
2
|
// A little bit hacky, but the best solution so far. ^_^
|
3
|
-
<%
|
3
|
+
<% self.class.send(:include, Alchemy::Engine.routes.url_helpers) %>
|
4
4
|
if (typeof(Alchemy) === 'undefined') {
|
5
5
|
var Alchemy = {};
|
6
6
|
}
|
@@ -13,25 +13,25 @@ if (typeof(Alchemy) === 'undefined') {
|
|
13
13
|
Alchemy.routes = {
|
14
14
|
|
15
15
|
admin_picture_path: function(id) {
|
16
|
-
return '<%=
|
16
|
+
return '<%= admin_picture_path(:id => 1) %>'.replace(/1/, id);
|
17
17
|
},
|
18
18
|
|
19
19
|
admin_trash_path : function(page_id) {
|
20
|
-
var url = '<%=
|
20
|
+
var url = '<%= admin_trash_path %>';
|
21
21
|
if (page_id)
|
22
22
|
url += '?page_id=' + page_id;
|
23
23
|
return url;
|
24
24
|
},
|
25
25
|
|
26
26
|
fold_admin_element_path: function(id) {
|
27
|
-
return '<%=
|
27
|
+
return '<%= fold_admin_element_path(:id => 1) %>'.replace(/1/, id);
|
28
28
|
},
|
29
29
|
|
30
|
-
list_admin_elements_path: '<%=
|
31
|
-
order_admin_contents_path: '<%=
|
32
|
-
order_admin_elements_path: '<%=
|
33
|
-
order_admin_pages_path: '<%=
|
34
|
-
link_admin_pages_path: '<%=
|
30
|
+
list_admin_elements_path: '<%= list_admin_elements_path %>',
|
31
|
+
order_admin_contents_path: '<%= order_admin_contents_path %>',
|
32
|
+
order_admin_elements_path: '<%= order_admin_elements_path %>',
|
33
|
+
order_admin_pages_path: '<%= order_admin_pages_path %>',
|
34
|
+
link_admin_pages_path: '<%= link_admin_pages_path %>'
|
35
35
|
|
36
36
|
}
|
37
37
|
|
@@ -1,4 +1,4 @@
|
|
1
|
-
@import "defaults";
|
1
|
+
@import "alchemy/defaults";
|
2
2
|
|
3
3
|
html {
|
4
4
|
height: 100%;
|
@@ -1282,18 +1282,18 @@ div#user_list_legend {
|
|
1282
1282
|
}
|
1283
1283
|
|
1284
1284
|
#toolbar div.button_with_label form label {
|
1285
|
-
margin-top:
|
1285
|
+
margin-top: $default-margin;
|
1286
1286
|
}
|
1287
1287
|
|
1288
1288
|
#toolbar div.search_field {
|
1289
1289
|
position: relative;
|
1290
1290
|
float: left;
|
1291
|
-
margin-bottom:
|
1291
|
+
margin-bottom: $default-margin;
|
1292
1292
|
}
|
1293
1293
|
|
1294
1294
|
#toolbar div p {
|
1295
1295
|
float: right;
|
1296
|
-
margin: 3px
|
1296
|
+
margin: 3px $default-margin 0 0;
|
1297
1297
|
padding: 0;
|
1298
1298
|
}
|
1299
1299
|
|
@@ -1303,8 +1303,8 @@ div#toolbar div.toolbar_spacer {
|
|
1303
1303
|
height: 37px;
|
1304
1304
|
border-right-style: dotted;
|
1305
1305
|
border-right-width: 1px;
|
1306
|
-
margin-right:
|
1307
|
-
margin-left:
|
1306
|
+
margin-right: 2*$default-margin;
|
1307
|
+
margin-left: $default-margin;
|
1308
1308
|
}
|
1309
1309
|
|
1310
1310
|
div#toolbar a.button {
|
@@ -2484,23 +2484,65 @@ div.button_with_label {
|
|
2484
2484
|
margin-left: 8px;
|
2485
2485
|
float: left;
|
2486
2486
|
min-width: 70px;
|
2487
|
-
|
2488
|
-
|
2489
|
-
|
2490
|
-
|
2491
|
-
|
2492
|
-
|
2493
|
-
|
2494
|
-
|
2495
|
-
|
2496
|
-
|
2497
|
-
|
2498
|
-
}
|
2499
|
-
|
2500
|
-
|
2501
|
-
|
2502
|
-
|
2503
|
-
|
2487
|
+
line-height: 0;
|
2488
|
+
|
2489
|
+
&.active {
|
2490
|
+
.icon_button {
|
2491
|
+
background-color: #cdd6db;
|
2492
|
+
border-style: inset;
|
2493
|
+
border-color: #bfbfbf;
|
2494
|
+
}
|
2495
|
+
label {
|
2496
|
+
color: black;
|
2497
|
+
text-shadow: white 0 0 2px;
|
2498
|
+
}
|
2499
|
+
}
|
2500
|
+
|
2501
|
+
.disabledButton {
|
2502
|
+
position: absolute;
|
2503
|
+
top: 0;
|
2504
|
+
left: 0;
|
2505
|
+
width: 100%;
|
2506
|
+
height: 100%;
|
2507
|
+
z-index: 1;
|
2508
|
+
}
|
2509
|
+
|
2510
|
+
a.icon_button {
|
2511
|
+
float: none;
|
2512
|
+
margin-right: auto;
|
2513
|
+
margin-left: auto;
|
2514
|
+
display: inline-block;
|
2515
|
+
position: relative;
|
2516
|
+
}
|
2517
|
+
|
2518
|
+
&.disabled {
|
2519
|
+
position: relative;
|
2520
|
+
@include opacity(50);
|
2521
|
+
cursor: default;
|
2522
|
+
|
2523
|
+
a:hover, a:active {
|
2524
|
+
cursor: default;
|
2525
|
+
background-color: #f7f7f7;
|
2526
|
+
border: 1px solid #9a9a9a;
|
2527
|
+
}
|
2528
|
+
|
2529
|
+
&:before {
|
2530
|
+
content: '';
|
2531
|
+
position: absolute;
|
2532
|
+
z-index: 1;
|
2533
|
+
width: 100%;
|
2534
|
+
height: 100%;
|
2535
|
+
background-color: transparent;
|
2536
|
+
@include opacity(50);
|
2537
|
+
}
|
2538
|
+
|
2539
|
+
&:hover label {
|
2540
|
+
color: $text-color;
|
2541
|
+
cursor: default;
|
2542
|
+
}
|
2543
|
+
|
2544
|
+
}
|
2545
|
+
|
2504
2546
|
}
|
2505
2547
|
|
2506
2548
|
.icon_button.disabled span {
|
@@ -2515,50 +2557,10 @@ div.button_with_label.disabled {
|
|
2515
2557
|
cursor: default;
|
2516
2558
|
}
|
2517
2559
|
|
2518
|
-
div
|
2519
|
-
content: '';
|
2520
|
-
position: absolute;
|
2521
|
-
z-index: 1;
|
2522
|
-
width: 100%;
|
2523
|
-
height: 100%;
|
2524
|
-
background-color: transparent;
|
2525
|
-
@include opacity(50);
|
2526
|
-
}
|
2527
|
-
|
2528
|
-
div.button_with_label.disabled a:hover,
|
2529
|
-
div.button_with_label.disabled a:active {
|
2530
|
-
cursor: default;
|
2531
|
-
background-color: #f7f7f7;
|
2532
|
-
border: 1px solid #9a9a9a;
|
2533
|
-
}
|
2534
|
-
|
2535
|
-
div.button_with_label.disabled:hover label {
|
2536
|
-
color: $text-color;
|
2537
|
-
cursor: default;
|
2538
|
-
}
|
2539
|
-
|
2540
|
-
div.button_with_label .disabledButton {
|
2541
|
-
position: absolute;
|
2542
|
-
top: 0;
|
2543
|
-
left: 0;
|
2544
|
-
width: 100%;
|
2545
|
-
height: 100%;
|
2546
|
-
z-index: 1;
|
2547
|
-
}
|
2548
|
-
|
2549
|
-
div.button_with_label a.icon_button {
|
2550
|
-
float: none;
|
2551
|
-
margin-right: auto;
|
2552
|
-
margin-left: auto;
|
2553
|
-
display: inline-block;
|
2554
|
-
position: relative;
|
2555
|
-
}
|
2556
|
-
|
2557
|
-
div#toolbar label,
|
2558
|
-
div#overlay_toolbar label {
|
2560
|
+
div#toolbar label, div#overlay_toolbar label {
|
2559
2561
|
font-size: 10px;
|
2560
2562
|
text-shadow: #fff 0 1px 2px;
|
2561
|
-
margin-top:
|
2563
|
+
margin-top: $default-margin;
|
2562
2564
|
display: block;
|
2563
2565
|
line-height: 13px;
|
2564
2566
|
}
|
@@ -2572,7 +2574,7 @@ div.button_with_label:hover label {
|
|
2572
2574
|
padding: $default-padding;
|
2573
2575
|
border: 1px solid #9a9a9a;
|
2574
2576
|
@include rounded-corner;
|
2575
|
-
margin-right:
|
2577
|
+
margin-right: $default-margin;
|
2576
2578
|
background: #fff image-url('alchemy/shading.png') repeat-x 0 -75px;
|
2577
2579
|
text-decoration: none;
|
2578
2580
|
}
|
@@ -1,4 +1,4 @@
|
|
1
|
-
@import "defaults";
|
1
|
+
@import "alchemy/defaults";
|
2
2
|
|
3
3
|
#alchemy div.content_editor input.text_with_icon.auto_resize.thin_border {
|
4
4
|
padding-right: 52px;
|
@@ -426,7 +426,7 @@ a.icon_button.linked {
|
|
426
426
|
cursor: default;
|
427
427
|
}
|
428
428
|
|
429
|
-
div.
|
429
|
+
div.essence_picture_editor {
|
430
430
|
position: relative;
|
431
431
|
float: left;
|
432
432
|
margin: 0;
|
@@ -444,6 +444,7 @@ div.essence_picture_editor.validation_failed .picture_thumbnail {
|
|
444
444
|
border-color: #931f23;
|
445
445
|
-webkit-box-shadow: #931f23 0px 1px 3px;
|
446
446
|
-moz-box-shadow: #931f23 0px 1px 3px;
|
447
|
+
-ms-box-shadow: #931f23 0px 1px 3px;
|
447
448
|
-o-box-shadow: #931f23 0px 1px 3px;
|
448
449
|
box-shadow: #931f23 0px 1px 3px;
|
449
450
|
}
|
@@ -42,8 +42,9 @@ module Alchemy
|
|
42
42
|
source_element = Element.find(element_from_clipboard[:id])
|
43
43
|
@element = Element.copy(source_element, {:page_id => @page.id})
|
44
44
|
if element_from_clipboard[:action] == 'cut'
|
45
|
-
source_element.
|
45
|
+
@cutted_element_id = source_element.id
|
46
46
|
@clipboard.delete_if { |i| i[:id].to_i == source_element.id }
|
47
|
+
source_element.destroy
|
47
48
|
end
|
48
49
|
else
|
49
50
|
@element = Element.new_from_scratch(params[:element])
|
@@ -54,7 +54,7 @@ module Alchemy
|
|
54
54
|
else
|
55
55
|
page = Page.create(params[:page])
|
56
56
|
end
|
57
|
-
render_errors_or_redirect(page, parent.layoutpage? ? admin_layoutpages_path : admin_pages_path, t("Page created
|
57
|
+
render_errors_or_redirect(page, parent.layoutpage? ? admin_layoutpages_path : admin_pages_path, t("Page created", :name => page.name), 'form#new_page_form button.button')
|
58
58
|
end
|
59
59
|
|
60
60
|
# Edit the content of the page and all its elements and contents.
|
@@ -210,7 +210,7 @@ module Alchemy
|
|
210
210
|
|
211
211
|
def switch_language
|
212
212
|
set_language_from(params[:language_id])
|
213
|
-
redirect_path =
|
213
|
+
redirect_path = request.referer.include?('admin/layoutpages') ? admin_layoutpages_path : admin_pages_path
|
214
214
|
if request.xhr?
|
215
215
|
@redirect_url = redirect_path
|
216
216
|
render :action => :redirect
|
@@ -240,12 +240,22 @@ module Alchemy
|
|
240
240
|
|
241
241
|
def expire_page(page)
|
242
242
|
return if page.do_not_sweep
|
243
|
-
expire_action
|
244
|
-
|
245
|
-
|
246
|
-
|
247
|
-
|
248
|
-
)
|
243
|
+
# TODO: We should change this back to expire_action after Rails 3.2 was released.
|
244
|
+
# expire_action(
|
245
|
+
# alchemy.show_page_url(
|
246
|
+
# :urlname => page.urlname_was,
|
247
|
+
# :lang => multi_language? ? page.language_code : nil
|
248
|
+
# )
|
249
|
+
# )
|
250
|
+
# Temporarily fix for Rails 3 bug
|
251
|
+
expire_fragment(ActionController::Caching::Actions::ActionCachePath.new(
|
252
|
+
self,
|
253
|
+
alchemy.show_page_url(
|
254
|
+
:urlname => page.urlname_was,
|
255
|
+
:lang => multi_language? ? page.language_code : nil
|
256
|
+
),
|
257
|
+
false
|
258
|
+
).path)
|
249
259
|
end
|
250
260
|
|
251
261
|
end
|