alchemy_cms 2.1.1 → 2.1.2
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/.travis.yml +1 -1
- data/app/assets/images/alchemy/placeholder.png +0 -0
- data/app/assets/javascripts/alchemy/alchemy.base.js +11 -0
- data/app/assets/javascripts/alchemy/alchemy.dirty.js +1 -1
- data/app/assets/javascripts/alchemy/alchemy.dragndrop.js +0 -1
- data/app/assets/stylesheets/alchemy/base.css.scss +0 -11
- data/app/assets/stylesheets/alchemy/elements.css.scss +42 -33
- data/app/controllers/alchemy/admin/contents_controller.rb +1 -1
- data/app/controllers/alchemy/admin/resources_controller.rb +2 -2
- data/app/helpers/alchemy/admin/elements_helper.rb +11 -8
- data/app/helpers/alchemy/pages_helper.rb +4 -2
- data/app/models/alchemy/element.rb +1 -1
- data/app/models/alchemy/essence_picture.rb +7 -0
- data/app/views/alchemy/admin/elements/_element_head.html.erb +1 -1
- data/app/views/alchemy/admin/elements/_picture_editor.html.erb +20 -17
- data/app/views/alchemy/admin/pages/edit.html.erb +5 -3
- data/app/views/alchemy/elements/_searchresult_editor.html.erb +1 -1
- data/app/views/alchemy/elements/_sitemap_editor.html.erb +1 -1
- data/app/views/alchemy/essences/_essence_picture_editor.html.erb +74 -68
- data/bin/alchemy +98 -96
- data/config/locales/alchemy.de.yml +7 -7
- data/config/locales/alchemy.en.yml +7 -0
- data/lib/alchemy/version.rb +1 -1
- data/spec/models/essence_picture_spec.rb +11 -0
- metadata +34 -32
data/.travis.yml
CHANGED
Binary file
|
@@ -106,6 +106,17 @@ if (typeof(Alchemy) === 'undefined') {
|
|
106
106
|
};
|
107
107
|
},
|
108
108
|
|
109
|
+
removePicture : function(selector) {
|
110
|
+
var $form_field = $(selector);
|
111
|
+
var $element = $form_field.parents('.element_editor');
|
112
|
+
if ($form_field) {
|
113
|
+
$form_field.val('');
|
114
|
+
$form_field.prev().remove();
|
115
|
+
$form_field.parent().addClass('missing');
|
116
|
+
Alchemy.setElementDirty($element);
|
117
|
+
}
|
118
|
+
},
|
119
|
+
|
109
120
|
saveElement : function(form) {
|
110
121
|
// disabled for now. I think we don't need this.
|
111
122
|
return true;
|
@@ -923,17 +923,6 @@ div#image_assign_filter_and_image_sizing {
|
|
923
923
|
cursor: image-url('alchemy/lupe.cur'), zoom-in, pointer;
|
924
924
|
}
|
925
925
|
|
926
|
-
.essence_picture_editor .picture_thumbnail {
|
927
|
-
width: 111px;
|
928
|
-
height: 115px;
|
929
|
-
margin: 1px;
|
930
|
-
}
|
931
|
-
|
932
|
-
.essence_picture_editor .picture_thumbnail .thumbnail_background {
|
933
|
-
width: 111px;
|
934
|
-
height: 93px;
|
935
|
-
}
|
936
|
-
|
937
926
|
div.picture_thumbnail.small {
|
938
927
|
width: 80px;
|
939
928
|
height: 75px;
|
@@ -245,7 +245,6 @@ form.add_gallery_to_index {
|
|
245
245
|
}
|
246
246
|
|
247
247
|
div.picture_gallery_images {
|
248
|
-
margin-top: 8px;
|
249
248
|
overflow: hidden;
|
250
249
|
margin-bottom: 8px;
|
251
250
|
border: 1px inset #cecece;
|
@@ -434,9 +433,18 @@ a.icon_button.linked {
|
|
434
433
|
}
|
435
434
|
|
436
435
|
div.essence_picture_editor {
|
437
|
-
position: relative;
|
438
436
|
float: left;
|
439
|
-
|
437
|
+
height: 126px;
|
438
|
+
margin: 1px;
|
439
|
+
position: relative;
|
440
|
+
}
|
441
|
+
|
442
|
+
div.essence_picture_editor.content_editor {
|
443
|
+
float: none;
|
444
|
+
height: auto;
|
445
|
+
display: inline;
|
446
|
+
display: inline-block;
|
447
|
+
margin: 8px 0;
|
440
448
|
}
|
441
449
|
|
442
450
|
div.essence_picture_editor .picture_tool_delete {
|
@@ -470,28 +478,18 @@ div.essence_picture_css_class {
|
|
470
478
|
overflow: hidden;
|
471
479
|
}
|
472
480
|
|
473
|
-
div.essence_picture_editor:hover .picture_tool_delete {
|
481
|
+
div.essence_picture_editor .picture_thumbnail:hover .picture_tool_delete {
|
474
482
|
display: block;
|
475
483
|
}
|
476
484
|
|
477
|
-
.
|
478
|
-
|
479
|
-
|
480
|
-
|
481
|
-
.picture_thumbnail div.missing_image {
|
482
|
-
height: 94px;
|
483
|
-
text-align: center;
|
484
|
-
line-height: 28px;
|
485
|
-
color: #b3b3b3;
|
485
|
+
div.essence_picture_editor .thumbnail_background.missing {
|
486
|
+
background-image: image-url('alchemy/placeholder.png');
|
487
|
+
background-repeat: no-repeat;
|
488
|
+
background-position: center 12px;
|
486
489
|
}
|
487
490
|
|
488
|
-
.
|
489
|
-
|
490
|
-
}
|
491
|
-
|
492
|
-
.picture_thumbnail div.missing_image img {
|
493
|
-
position: relative;
|
494
|
-
top: 10px;
|
491
|
+
.dragable_picture {
|
492
|
+
float: left;
|
495
493
|
}
|
496
494
|
|
497
495
|
.picture_thumbnail .picture_handle {
|
@@ -510,10 +508,30 @@ div.essence_picture_editor:hover .picture_tool_delete {
|
|
510
508
|
}
|
511
509
|
|
512
510
|
.picture_content_spinner {
|
511
|
+
background: #666666;
|
512
|
+
height: 93px;
|
513
|
+
left: 4px;
|
513
514
|
position: absolute;
|
514
|
-
|
515
|
-
|
516
|
-
|
515
|
+
top: 4px;
|
516
|
+
width: inherit;
|
517
|
+
img {
|
518
|
+
top: 50%;
|
519
|
+
left: 50%;
|
520
|
+
position: absolute;
|
521
|
+
margin-top: -16px;
|
522
|
+
margin-left: -16px;
|
523
|
+
}
|
524
|
+
}
|
525
|
+
|
526
|
+
.essence_picture_editor .picture_thumbnail {
|
527
|
+
width: 111px;
|
528
|
+
height: 115px;
|
529
|
+
margin: 0;
|
530
|
+
}
|
531
|
+
|
532
|
+
.essence_picture_editor .picture_thumbnail .thumbnail_background {
|
533
|
+
width: 111px;
|
534
|
+
height: 93px;
|
517
535
|
}
|
518
536
|
|
519
537
|
div.file {
|
@@ -689,6 +707,7 @@ div.content_editor label {
|
|
689
707
|
font-size: 10px;
|
690
708
|
text-shadow: #fff5e1 1px 1px 0;
|
691
709
|
line-height: 15px;
|
710
|
+
text-indent: 1px;
|
692
711
|
}
|
693
712
|
|
694
713
|
div.content_editor label span.warning.icon {
|
@@ -777,16 +796,6 @@ textarea.tinymce {
|
|
777
796
|
border-width: 1px;
|
778
797
|
}
|
779
798
|
|
780
|
-
.droppable_content_placeholder {
|
781
|
-
border: 1px dotted #bba589;
|
782
|
-
background-color: #f0e8d7;
|
783
|
-
float: left;
|
784
|
-
width: 111px;
|
785
|
-
height: 115px;
|
786
|
-
padding: 4px;
|
787
|
-
margin: 1px;
|
788
|
-
}
|
789
|
-
|
790
799
|
div.element_editor div.error {
|
791
800
|
padding: 8px 4px 8px 32px;
|
792
801
|
margin-bottom: 8px;
|
@@ -18,7 +18,7 @@ module Alchemy
|
|
18
18
|
@options = Rack::Utils.parse_query(@options)
|
19
19
|
end
|
20
20
|
if @content.essence_type == "Alchemy::EssencePicture"
|
21
|
-
@content.essence.
|
21
|
+
@content.essence.picture_id = params[:picture_id]
|
22
22
|
@content.essence.save
|
23
23
|
@contents_of_this_type = @element.contents.find_all_by_essence_type('Alchemy::EssencePicture')
|
24
24
|
@dragable = @contents_of_this_type.length > 1
|
@@ -50,7 +50,7 @@ module Alchemy
|
|
50
50
|
resource_instance_variable.save
|
51
51
|
render_errors_or_redirect(
|
52
52
|
resource_instance_variable,
|
53
|
-
url_for({:action => :index}),
|
53
|
+
resource_url_scope.url_for({:action => :index}),
|
54
54
|
flash_notice_for_resource_action
|
55
55
|
)
|
56
56
|
end
|
@@ -59,7 +59,7 @@ module Alchemy
|
|
59
59
|
resource_instance_variable.update_attributes(params[resource_model_name.to_sym])
|
60
60
|
render_errors_or_redirect(
|
61
61
|
resource_instance_variable,
|
62
|
-
url_for({:action => :index}),
|
62
|
+
resource_url_scope.url_for({:action => :index}),
|
63
63
|
flash_notice_for_resource_action
|
64
64
|
)
|
65
65
|
end
|
@@ -37,20 +37,22 @@ module Alchemy
|
|
37
37
|
render_element(element, :editor)
|
38
38
|
end
|
39
39
|
|
40
|
-
#
|
41
|
-
#
|
40
|
+
# Renders a drag'n'drop picture gallery editor for all EssencePictures.
|
41
|
+
#
|
42
|
+
# It brings full functionality for adding images, deleting images and sorting them via drag'n'drop.
|
42
43
|
# Just place this helper inside your element editor view, pass the element as parameter and that's it.
|
43
44
|
#
|
44
|
-
# Options:
|
45
|
-
#
|
46
|
-
|
45
|
+
# === Options:
|
46
|
+
#
|
47
|
+
# :maximum_amount_of_images [Integer] # This option let you handle the amount of images your customer can add to this element.
|
48
|
+
#
|
49
|
+
def render_picture_gallery_editor(element, options={})
|
47
50
|
default_options = {
|
48
|
-
:last_image_deletable => true,
|
49
51
|
:maximum_amount_of_images => nil,
|
50
|
-
:
|
52
|
+
:grouped => true
|
51
53
|
}
|
52
54
|
options = default_options.merge(options)
|
53
|
-
picture_contents = element.
|
55
|
+
picture_contents = element.contents.where(:essence_type => "Alchemy::EssencePicture")
|
54
56
|
render(
|
55
57
|
:partial => "alchemy/admin/elements/picture_editor",
|
56
58
|
:locals => {
|
@@ -60,6 +62,7 @@ module Alchemy
|
|
60
62
|
}
|
61
63
|
)
|
62
64
|
end
|
65
|
+
alias_method :render_picture_editor, :render_picture_gallery_editor
|
63
66
|
|
64
67
|
# Returns all elements that could be placed on that page because of the pages layout.
|
65
68
|
# The elements are returned as an array to be used in alchemy_selectbox form builder.
|
@@ -442,7 +442,9 @@ module Alchemy
|
|
442
442
|
def render_search_form(options={})
|
443
443
|
default_options = {
|
444
444
|
:page => @search_result_page,
|
445
|
-
:html5 => false
|
445
|
+
:html5 => false,
|
446
|
+
:button_value => t("search"),
|
447
|
+
:button_class => nil
|
446
448
|
}
|
447
449
|
options = default_options.merge(options)
|
448
450
|
if options[:page].class.name != "Alchemy::Page"
|
@@ -453,7 +455,7 @@ module Alchemy
|
|
453
455
|
if options[:html5]
|
454
456
|
search_field_tag(:query, params[:query])
|
455
457
|
else
|
456
|
-
text_field_tag(:query, params[:query]) + submit_tag(
|
458
|
+
text_field_tag(:query, params[:query]) + submit_tag(options[:button_value], :class => options[:button_class], :name => nil)
|
457
459
|
end
|
458
460
|
end
|
459
461
|
end
|
@@ -11,7 +11,7 @@ module Alchemy
|
|
11
11
|
has_and_belongs_to_many :to_be_sweeped_pages, :class_name => 'Alchemy::Page', :uniq => true, :join_table => 'alchemy_elements_alchemy_pages'
|
12
12
|
|
13
13
|
validates_uniqueness_of :position, :scope => [:page_id, :cell_id]
|
14
|
-
validates_presence_of :name, :on => :create, :message => '^'+Alchemy::I18n.t(
|
14
|
+
validates_presence_of :name, :on => :create, :message => '^'+Alchemy::I18n.t(:choose_element)
|
15
15
|
|
16
16
|
attr_accessor :create_contents_after_create
|
17
17
|
|
@@ -8,6 +8,13 @@ module Alchemy
|
|
8
8
|
|
9
9
|
belongs_to :picture
|
10
10
|
before_save :replace_newlines
|
11
|
+
before_save :fix_crop_from
|
12
|
+
|
13
|
+
private
|
14
|
+
|
15
|
+
def fix_crop_from
|
16
|
+
write_attribute(:crop_from, self.crop_from.to_s.split('x').map { |number| number.to_i < 0 ? "0" : number }.join('x'))
|
17
|
+
end
|
11
18
|
|
12
19
|
def replace_newlines
|
13
20
|
return nil if caption.nil?
|
@@ -20,7 +20,7 @@
|
|
20
20
|
) %>
|
21
21
|
<%= link_to_function(
|
22
22
|
"",
|
23
|
-
"Alchemy.toggleElement(#{element.id}, '#{alchemy.fold_admin_element_path(element)}', '#{form_authenticity_token}', {title: '#{ t('Warning!') }', message: '#{ t(
|
23
|
+
"Alchemy.toggleElement(#{element.id}, '#{alchemy.fold_admin_element_path(element)}', '#{form_authenticity_token}', {title: '#{ t('Warning!') }', message: '#{ t(:element_dirty_notice) }', okLabel: '#{ t('Yes') }', cancelLabel: '#{ t('No') }'})",
|
24
24
|
:class => element.folded? ? 'expand_element' : 'fold_element',
|
25
25
|
:title => element.folded? ? t('show_element_content') : t('hide_element_content'),
|
26
26
|
:id => "element_#{element.id}_folder"
|
@@ -1,22 +1,25 @@
|
|
1
1
|
<%- max_image_count = options[:maximum_amount_of_images] || options[:max_images] -%>
|
2
|
-
<div class="
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
<%- end -%>
|
8
|
-
<%- if max_image_count.blank? || picture_contents.length < max_image_count.to_i -%>
|
9
|
-
<%= render(
|
10
|
-
:partial => 'alchemy/admin/elements/add_content',
|
11
|
-
:locals => {
|
12
|
-
:element => element,
|
13
|
-
:essence_type => "Alchemy::EssencePicture",
|
14
|
-
:link_text => t("add_image_to_element"),
|
15
|
-
:options => options,
|
2
|
+
<div class="content_editor">
|
3
|
+
<label><%= t("picture_gallery_editor.#{element.name}", :default => t('picture_gallery_editor')) %></label>
|
4
|
+
<div class="picture_gallery_images" id="element_<%= element.id %>_contents">
|
5
|
+
<%- picture_contents.each do |picture_content| -%>
|
6
|
+
<%= render_essence_editor(picture_content, {
|
16
7
|
:dragable => (picture_contents.size > 1)
|
17
|
-
}
|
18
|
-
|
19
|
-
|
8
|
+
}.merge(options)) %>
|
9
|
+
<%- end -%>
|
10
|
+
<%- if max_image_count.blank? || picture_contents.length < max_image_count.to_i -%>
|
11
|
+
<%= render(
|
12
|
+
:partial => 'alchemy/admin/elements/add_content',
|
13
|
+
:locals => {
|
14
|
+
:element => element,
|
15
|
+
:essence_type => "Alchemy::EssencePicture",
|
16
|
+
:link_text => t("add_image_to_element"),
|
17
|
+
:options => options,
|
18
|
+
:dragable => (picture_contents.size > 1)
|
19
|
+
}
|
20
|
+
) %>
|
21
|
+
<%- end -%>
|
22
|
+
</div>
|
20
23
|
</div>
|
21
24
|
<%- if picture_contents.size > 1 -%>
|
22
25
|
<script type="text/javascript" charset="utf-8">
|
@@ -102,7 +102,7 @@
|
|
102
102
|
texts: {
|
103
103
|
title: '<%= t("Elements") -%>',
|
104
104
|
dirtyTitle: '<%= t("Warning!") -%>',
|
105
|
-
dirtyMessage: '<%= t(
|
105
|
+
dirtyMessage: '<%= t(:element_dirty_close_window_notice) -%>',
|
106
106
|
okLabel: '<%= t("Yes") -%>',
|
107
107
|
cancelLabel: '<%= t("No") -%>'
|
108
108
|
},
|
@@ -165,12 +165,14 @@
|
|
165
165
|
jQuery(document).ready(function($) {
|
166
166
|
var texts = {
|
167
167
|
title: '<%= t("Warning!") %>',
|
168
|
-
message: '<%= t(
|
168
|
+
message: '<%= t(:element_dirty_page_leave_warning) %>',
|
169
169
|
okLabel: '<%= t("Yes") %>',
|
170
170
|
cancelLabel: '<%= t("No") %>'
|
171
171
|
};
|
172
172
|
$('#unlock_page_form, #visit_page_form, #publish_page_form').on('submit', function(event) {
|
173
|
-
|
173
|
+
var not_dirty = Alchemy.checkPageDirtyness(this, texts);
|
174
|
+
if (!not_dirty) Alchemy.pleaseWaitOverlay(false);
|
175
|
+
return not_dirty;
|
174
176
|
});
|
175
177
|
Alchemy.PageLeaveObserver(texts);
|
176
178
|
Alchemy.openElementsWindow();
|
@@ -1 +1 @@
|
|
1
|
-
<p><%= t(
|
1
|
+
<p><%= t(:searchresults_editor_info) %></p>
|
@@ -1,69 +1,75 @@
|
|
1
|
-
<div id="<%= content_dom_id(content) %>" class="<%= options[:dragable] ? 'essence_picture_editor dragable_picture' :
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
1
|
+
<div id="<%= content_dom_id(content) %>" class="<%= options[:dragable] ? 'essence_picture_editor dragable_picture' : "essence_picture_editor#{options[:grouped] ? nil : ' content_editor'}" %>">
|
2
|
+
<% unless options[:grouped] %>
|
3
|
+
<label><%= render_content_name(content) %></label>
|
4
|
+
<% end %>
|
5
|
+
<div class="picture_thumbnail">
|
6
|
+
<span class="picture_tool_delete">
|
7
|
+
<% if options[:grouped] %>
|
8
|
+
<%= link_to_confirmation_window(
|
9
|
+
"",
|
10
|
+
t("confirm_to_delete_image"),
|
11
|
+
alchemy.admin_essence_picture_path(
|
12
|
+
:id => content,
|
13
|
+
:options => options
|
14
|
+
),
|
15
|
+
{
|
16
|
+
:title => t("delete_image"),
|
17
|
+
:class => "picture_delete"
|
18
|
+
}
|
19
|
+
) -%>
|
20
|
+
<% else %>
|
21
|
+
<%= link_to(
|
22
|
+
'',
|
23
|
+
'#',
|
24
|
+
:onclick => "Alchemy.removePicture('##{content.form_field_id(:picture_id)}');"
|
25
|
+
) %>
|
26
|
+
<% end %>
|
27
|
+
</span>
|
28
|
+
<%- if content.ingredient -%>
|
29
|
+
<div class="picture_handle" title="<%= t('drag_to_sort') if options[:dragable] %>"></div>
|
30
|
+
<div class="picture_content_spinner">
|
31
|
+
<%= image_tag("alchemy/image_loader.gif", :alt => '') %>
|
32
|
+
</div>
|
33
|
+
<%- end -%>
|
34
|
+
<div class="picture_image">
|
35
|
+
<div class="thumbnail_background<%= ' missing' if content.ingredient.nil? %>">
|
36
|
+
<%- if content.ingredient -%>
|
37
|
+
<%= image_tag(
|
38
|
+
alchemy.thumbnail_path(
|
39
|
+
:id => content.ingredient.id,
|
40
|
+
:size => content.ingredient.cropped_thumbnail_size(content.essence.render_size.blank? ? options[:image_size] : content.essence.render_size),
|
41
|
+
:crop_from => content.essence.crop_from.blank? ? nil : content.essence.crop_from,
|
42
|
+
:crop_size => content.essence.crop_size.blank? ? nil : content.essence.crop_size,
|
43
|
+
:crop => content.essence.crop_size.blank? && content.essence.crop_from.blank? ? 'crop' : nil,
|
44
|
+
:name => content.ingredient.urlname
|
45
|
+
),
|
46
|
+
:alt => content.ingredient.name,
|
47
|
+
:class => 'img_paddingtop',
|
48
|
+
:title => t("image_name") + ": #{content.ingredient.name}",
|
49
|
+
:onload => "Alchemy.fadeImage(this, '##{content_dom_id(content)} .picture_content_spinner');",
|
50
|
+
:style => "display: none;"
|
51
|
+
) %>
|
52
|
+
<%= hidden_field_tag content.form_field_name(:picture_id), content.ingredient.id %>
|
53
|
+
<% end %>
|
54
|
+
</div>
|
55
|
+
</div>
|
56
|
+
<%- unless options[:css_class].blank? || content.essence.css_class.blank? -%>
|
57
|
+
<div class="essence_picture_css_class">
|
58
|
+
<%= t("alchemy.essence_pictures.css_classes.#{content.essence.css_class}", :default => content.essence.css_class.camelcase) %>
|
59
|
+
</div>
|
60
|
+
<%- end -%>
|
61
|
+
<div class="edit_images_bottom">
|
62
|
+
<%= render(
|
63
|
+
:partial => 'alchemy/essences/essence_picture_tools',
|
64
|
+
:locals => {
|
65
|
+
:content => content,
|
66
|
+
:options => options
|
67
|
+
}
|
68
|
+
) %>
|
69
|
+
</div>
|
70
|
+
</div>
|
71
|
+
<%= hidden_field_tag content.form_field_name(:link), content.essence.link %>
|
72
|
+
<%= hidden_field_tag content.form_field_name(:link_title), content.essence.link_title %>
|
73
|
+
<%= hidden_field_tag content.form_field_name(:link_class_name), content.essence.link_class_name %>
|
74
|
+
<%= hidden_field_tag content.form_field_name(:link_target), content.essence.link_target %>
|
69
75
|
</div>
|
data/bin/alchemy
CHANGED
@@ -29,107 +29,113 @@ class AlchemyInstaller < Thor
|
|
29
29
|
method_option :database, :type => :string, :default => 'mysql', :aliases => "-d", :desc => "Type of database to use for this project. Default mysql."
|
30
30
|
def new(project)
|
31
31
|
@application = project.downcase.strip.gsub(/ /, '_')
|
32
|
-
|
32
|
+
say "Install Alchemy CMS into ./#{@application}", :yellow
|
33
|
+
say "Generating new Rails App...", :yellow
|
34
|
+
|
35
|
+
if system("rails _#{RAILS_VERSION}_ new #{@application} -m #{File.join(File.dirname(__FILE__), '..', 'lib', 'rails', 'templates', 'alchemy.rb')} -d #{options[:database]} -JT --old-style-hash #{options[:scm].nil? || options[:scm].empty? || options[:scm] == 'svn' ? '--skip-git' : ''}")
|
33
36
|
|
34
|
-
|
37
|
+
create_database_yml if options[:database] == 'mysql'
|
35
38
|
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
39
|
+
mountpoint = ask "\nWhere do you want to mount Alchemy CMS? (/)"
|
40
|
+
mountpoint = "/" if mountpoint.empty?
|
41
|
+
sentinel = /\.routes\.draw do(?:\s*\|map\|)?\s*$/
|
42
|
+
inject_into_file "#{@application}/config/routes.rb", "\n mount Alchemy::Engine => '#{mountpoint}'\n", { :after => sentinel, :verbose => true }
|
43
|
+
|
44
|
+
with_standard_set = yes?("\nDo you want to copy the files of Alchemy´s Standardset into your App? (y/N)")
|
45
|
+
|
46
|
+
if with_standard_set
|
47
|
+
sentinel = /::Application\.configure do\s*$/
|
48
|
+
inject_into_file "#{@application}/environments/production.rb", "\n config.assets.precompile += %w( alchemy/standard_set.css )\n", { :after => sentinel, :verbose => true }
|
49
|
+
end
|
50
|
+
|
51
|
+
%x[
|
52
|
+
cd ./#{@application}
|
53
|
+
rails g alchemy:scaffold#{' --with-standard-set' if with_standard_set}
|
54
|
+
rm ./public/index.html
|
55
|
+
rm ./app/views/layouts/application.html.erb
|
56
|
+
rm ./app/assets/images/rails.png
|
57
|
+
]
|
58
|
+
|
59
|
+
if !options[:scm].nil? && !options[:scm].empty?
|
44
60
|
|
45
|
-
|
61
|
+
clean_mountpoint = mountpoint.gsub('/', '')
|
46
62
|
|
47
63
|
%x[
|
48
64
|
cd ./#{@application}
|
49
|
-
|
50
|
-
rm ./
|
51
|
-
|
65
|
+
rm -rf ./tmp/*
|
66
|
+
rm -rf ./log/*
|
67
|
+
mkdir -p ./index
|
68
|
+
mkdir -p ./uploads
|
52
69
|
]
|
53
70
|
|
54
|
-
if
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
end
|
71
|
-
|
72
|
-
case options[:scm]
|
73
|
-
when 'svn'
|
74
|
-
server = ask("\nURL of your svn server:")
|
75
|
-
repository = ask("\nName of the repository (#{@application}):")
|
76
|
-
repository = @application if repository.empty?
|
77
|
-
|
78
|
-
say "\nImporting #{@application} into #{server}/#{repository} ...", :yellow
|
79
|
-
output = %x[svn import ./#{@application} #{server}/#{repository} -m 'initial import by Alchemy installer']; imported = $?.success?
|
71
|
+
if yes?("\nDo you want to generate a deploy script for Capistrano? (y/N)")
|
72
|
+
system "cd #{@application} && rails g alchemy:deploy_script --scm=#{options[:scm]} --db=#{options[:database]}"
|
73
|
+
say "\nCapifying...", :yellow
|
74
|
+
system "cd #{@application} && capify ."
|
75
|
+
end
|
76
|
+
|
77
|
+
case options[:scm]
|
78
|
+
when 'svn'
|
79
|
+
server = ask("\nURL of your svn server:")
|
80
|
+
repository = ask("\nName of the repository (#{@application}):")
|
81
|
+
repository = @application if repository.empty?
|
82
|
+
|
83
|
+
say "\nImporting #{@application} into #{server}/#{repository} ...", :yellow
|
84
|
+
output = %x[svn import ./#{@application} #{server}/#{repository} -m 'initial import by Alchemy installer']; imported = $?.success?
|
85
|
+
|
86
|
+
if imported
|
80
87
|
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
svn co #{server}/#{repository} #{@application}
|
87
|
-
]
|
88
|
-
|
89
|
-
say "Committing ignores...", :yellow
|
90
|
-
%x[
|
91
|
-
cd ./#{@application}
|
92
|
-
svn propset svn:ignore '*' tmp/ log/ index/ uploads/
|
93
|
-
svn propset svn:ignore '#{clean_mountpoint.empty? ? 'pictures' : clean_mountpoint}' ./public
|
94
|
-
svn propset svn:ignore 'assets' ./public
|
95
|
-
svn propset svn:ignore 'database.yml' ./config
|
96
|
-
svn commit -m 'set ignores'
|
97
|
-
]
|
98
|
-
|
99
|
-
else
|
100
|
-
say "Error while importing!", :red
|
101
|
-
end
|
88
|
+
say "Removing and checking out again...", :yellow
|
89
|
+
%x[
|
90
|
+
rm -rf ./#{@application}
|
91
|
+
svn co #{server}/#{repository} #{@application}
|
92
|
+
]
|
102
93
|
|
103
|
-
|
104
|
-
gitignore = <<-GIT
|
105
|
-
log/*
|
106
|
-
tmp/*
|
107
|
-
.DS_Store
|
108
|
-
upload/*
|
109
|
-
index/*
|
110
|
-
public/#{clean_mountpoint.empty? ? 'pictures' : clean_mountpoint}
|
111
|
-
public/assets
|
112
|
-
config/database.yml
|
113
|
-
GIT
|
94
|
+
say "Committing ignores...", :yellow
|
114
95
|
%x[
|
115
|
-
cd
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
git commit -am 'inital commit'
|
96
|
+
cd ./#{@application}
|
97
|
+
svn propset svn:ignore '*' tmp/ log/ index/ uploads/
|
98
|
+
svn propset svn:ignore '#{clean_mountpoint.empty? ? 'pictures' : clean_mountpoint}' ./public
|
99
|
+
svn propset svn:ignore 'assets' ./public
|
100
|
+
svn propset svn:ignore 'database.yml' ./config
|
101
|
+
svn commit -m 'set ignores'
|
122
102
|
]
|
123
|
-
|
124
|
-
|
103
|
+
|
104
|
+
else
|
105
|
+
say "Error while importing!", :red
|
106
|
+
end
|
107
|
+
|
108
|
+
when 'git'
|
109
|
+
gitignore = <<-GIT
|
110
|
+
log/*
|
111
|
+
tmp/*
|
112
|
+
.DS_Store
|
113
|
+
upload/*
|
114
|
+
index/*
|
115
|
+
public/#{clean_mountpoint.empty? ? 'pictures' : clean_mountpoint}
|
116
|
+
public/assets
|
117
|
+
config/database.yml
|
118
|
+
GIT
|
119
|
+
|
120
|
+
%x[
|
121
|
+
cd #{@application}
|
122
|
+
echo "#{gitignore}" > .gitignore
|
123
|
+
touch ./index/.gitkeep
|
124
|
+
touch ./uploads/.gitkeep
|
125
|
+
git init .
|
126
|
+
git add .
|
127
|
+
git commit -am 'inital commit'
|
128
|
+
]
|
125
129
|
end
|
126
130
|
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
131
|
+
end
|
132
|
+
|
133
|
+
%x[
|
134
|
+
cd ./#{@application}
|
135
|
+
rake db:create alchemy:install:migrations db:migrate alchemy:db:seed
|
136
|
+
]
|
137
|
+
|
138
|
+
readme = <<-EOF
|
133
139
|
|
134
140
|
Successfully installed Alchemy CMS into ./#{@application}
|
135
141
|
|
@@ -137,15 +143,15 @@ Next steps:
|
|
137
143
|
|
138
144
|
1. Go into your projects folder:
|
139
145
|
|
140
|
-
|
146
|
+
cd ./#{@application}
|
141
147
|
|
142
148
|
2. Start your local Rails server:
|
143
149
|
|
144
|
-
|
150
|
+
rails server
|
145
151
|
|
146
152
|
3. Open a browser and enter the following URL:
|
147
153
|
|
148
|
-
|
154
|
+
http://localhost:3000
|
149
155
|
|
150
156
|
4. Follow the instructions to complete the installation!
|
151
157
|
|
@@ -153,13 +159,9 @@ Thank you for using Alchemy CMS!
|
|
153
159
|
http://alchemy-cms.com
|
154
160
|
|
155
161
|
EOF
|
156
|
-
|
157
|
-
else
|
158
|
-
say "\nError while installation!\n", :red
|
159
|
-
end
|
160
|
-
|
162
|
+
say readme, :green
|
161
163
|
else
|
162
|
-
|
164
|
+
say "\nError while installation!\n", :red
|
163
165
|
end
|
164
166
|
end
|
165
167
|
|
@@ -250,7 +250,7 @@ de:
|
|
250
250
|
"Please check contents below.": "Bitte überprüfen Sie die markierten Felder."
|
251
251
|
"Please choose": "Bitte wählen"
|
252
252
|
"Please choose a page layout.": "Bitte wählen Sie einen Seitentyp."
|
253
|
-
|
253
|
+
choose_element: "Bitte wählen Sie ein Element."
|
254
254
|
"Please log in": "Bitte melden Sie sich an."
|
255
255
|
use_alternative_uploader_instead: "Benutzen Sie bitte diesen alternativen Uploader."
|
256
256
|
"Publish page": "veröffentlichen"
|
@@ -274,9 +274,9 @@ de:
|
|
274
274
|
"Successfully deleted content": "%{content} wurde gelöscht"
|
275
275
|
"Successfully saved content position": "Die Position wurde gespeichert."
|
276
276
|
"Switch to Flash® Uploader": "Auf den Flash® Uploader wechseln"
|
277
|
-
|
278
|
-
|
279
|
-
|
277
|
+
sitemap_editor_info: "Die Sitemap wird automatisch generiert"
|
278
|
+
searchresults_editor_info: "Dieses Element stellt die Suchergebnisse dar. Es Bedarf keinerlei Anpassung."
|
279
|
+
element_dirty_notice: "Dieses Element hat nicht gespeicherte Änderungen. Möchten Sie es wirklich einklappen?"
|
280
280
|
"This page is locked by %{name}": "Diese Seite wird gerade von %{name} blockiert"
|
281
281
|
"Title": "Titel"
|
282
282
|
"To manage your website open a browser and go to": "Um die Inhalte Ihrer Webseite zu bearbeiten klicken Sie bitte auf folgenden Link"
|
@@ -299,9 +299,7 @@ de:
|
|
299
299
|
"Who else is online": "Wer ist noch online"
|
300
300
|
"Yes": "Ja"
|
301
301
|
"You are not authorized": "Sie sind dazu nicht authorisiert."
|
302
|
-
|
303
|
-
"You have unsaved elements on this page. Do you really want to leave this page?": "Sie haben ungesicherte Elemente auf der Seite. Möchten Sie die Seite wirklich verlassen?"
|
304
|
-
"You have unsaved elements. Do you really want to close the elements window?": "Sie haben ungesicherte Elemente. Möchten Sie das Elemente Fenster wirklich schließen?"
|
302
|
+
element_dirty_close_window_notice: "Sie haben ungesicherte Elemente. Möchten Sie das Elemente Fenster wirklich schließen?"
|
305
303
|
"You may upload files with following extensions": "Sie können %{file_types_description} mit folgenden Endungen hochladen: %{file_types}"
|
306
304
|
"You may upload any file": "Sie können jede Art von Datei hochladen."
|
307
305
|
"Your last login was on %{time}": "Sie waren zuletzt angemeldet am %{time}."
|
@@ -364,6 +362,7 @@ de:
|
|
364
362
|
edit_page: "Seite bearbeiten"
|
365
363
|
edit_page_properties: "Seiteneigenschaften bearbeiten"
|
366
364
|
edit_user: "Benutzer bearbeiten"
|
365
|
+
element_dirty_page_leave_warning: "Sie haben ungesicherte Elemente auf der Seite. Möchten Sie wirklich fortfahren?"
|
367
366
|
element_editor_not_found: "Bei diesem Element ist ein Fehler aufgetreten"
|
368
367
|
element_of_type: "Element"
|
369
368
|
element_saved: "Element wurde gespeichert."
|
@@ -466,6 +465,7 @@ de:
|
|
466
465
|
previous_page: "vorherige Seite"
|
467
466
|
password: "Passwort"
|
468
467
|
paste: "einfügen"
|
468
|
+
picture_gallery_editor: 'Bilder'
|
469
469
|
place_link: "Text verlinken"
|
470
470
|
player_version: "Flashplayer Version"
|
471
471
|
"please enter a name": "Bitte geben Sie einen Namen ein."
|
@@ -186,6 +186,7 @@ en:
|
|
186
186
|
big_thumbnails: "Big thumbnails"
|
187
187
|
choose_element_as_target: "Please choose an element as target"
|
188
188
|
choose_element_to_link: "Please choose an element"
|
189
|
+
choose_element: "Please choose an element."
|
189
190
|
choose_file_to_link: "Please choose a file to link"
|
190
191
|
click_to_show_all: "Click to show all again."
|
191
192
|
confirm_to_delete_file: "Do you really want to delete this file from the server?"
|
@@ -219,6 +220,9 @@ en:
|
|
219
220
|
edit_page: "Edit this page"
|
220
221
|
edit_page_properties: "Edit the page´s properties."
|
221
222
|
edit_user: "Edit the user´s properties."
|
223
|
+
element_dirty_notice: "This element has unsaved changes. Do you really want to fold it?"
|
224
|
+
element_dirty_close_window_notice: "You have unsaved elements. Do you really want to close the elements window?"
|
225
|
+
element_dirty_page_leave_warning: "You have unsaved elements on this page. Do you really want to continue?"
|
222
226
|
element_editor_not_found: "Error within this Element"
|
223
227
|
element_of_type: "Element"
|
224
228
|
element_saved: "Saved element."
|
@@ -307,6 +311,7 @@ en:
|
|
307
311
|
next_page: "next page"
|
308
312
|
previous_page: "previous page"
|
309
313
|
password: "Password"
|
314
|
+
picture_gallery_editor: 'Pictures'
|
310
315
|
"Picture uploaded succesfully": "Picture %{name} uploaded succesfully"
|
311
316
|
"Picture renamed successfully": "Picture renamed successfully from %{from} to %{to}"
|
312
317
|
"Picture deleted successfully": "Picture %{name} deleted"
|
@@ -327,6 +332,8 @@ en:
|
|
327
332
|
show_eq: "Show EQ"
|
328
333
|
show_navigation: "Show in navigation"
|
329
334
|
show_page_in_sitemap: "Show page in sitemap."
|
335
|
+
sitemap_editor_notice: "The sitemap is autogenerated."
|
336
|
+
searchresults_editor_info: "This element displays the search and the searchresults."
|
330
337
|
small_thumbnails: "Small thumbnails"
|
331
338
|
successfully_added_element: "Succesfully added new element."
|
332
339
|
successfully_saved_element_position: "Element position updated succesfully."
|
data/lib/alchemy/version.rb
CHANGED
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: 2.1.
|
4
|
+
version: 2.1.2
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -11,11 +11,11 @@ authors:
|
|
11
11
|
autorequire:
|
12
12
|
bindir: bin
|
13
13
|
cert_chain: []
|
14
|
-
date: 2012-01
|
14
|
+
date: 2012-02-01 00:00:00.000000000 Z
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
17
17
|
name: rails
|
18
|
-
requirement: &
|
18
|
+
requirement: &70295293852440 !ruby/object:Gem::Requirement
|
19
19
|
none: false
|
20
20
|
requirements:
|
21
21
|
- - ~>
|
@@ -23,10 +23,10 @@ dependencies:
|
|
23
23
|
version: 3.1.3
|
24
24
|
type: :runtime
|
25
25
|
prerelease: false
|
26
|
-
version_requirements: *
|
26
|
+
version_requirements: *70295293852440
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: authlogic
|
29
|
-
requirement: &
|
29
|
+
requirement: &70295293851260 !ruby/object:Gem::Requirement
|
30
30
|
none: false
|
31
31
|
requirements:
|
32
32
|
- - ! '>='
|
@@ -34,10 +34,10 @@ dependencies:
|
|
34
34
|
version: '0'
|
35
35
|
type: :runtime
|
36
36
|
prerelease: false
|
37
|
-
version_requirements: *
|
37
|
+
version_requirements: *70295293851260
|
38
38
|
- !ruby/object:Gem::Dependency
|
39
39
|
name: awesome_nested_set
|
40
|
-
requirement: &
|
40
|
+
requirement: &70295293848080 !ruby/object:Gem::Requirement
|
41
41
|
none: false
|
42
42
|
requirements:
|
43
43
|
- - ~>
|
@@ -45,10 +45,10 @@ dependencies:
|
|
45
45
|
version: '2.0'
|
46
46
|
type: :runtime
|
47
47
|
prerelease: false
|
48
|
-
version_requirements: *
|
48
|
+
version_requirements: *70295293848080
|
49
49
|
- !ruby/object:Gem::Dependency
|
50
50
|
name: declarative_authorization
|
51
|
-
requirement: &
|
51
|
+
requirement: &70295293862020 !ruby/object:Gem::Requirement
|
52
52
|
none: false
|
53
53
|
requirements:
|
54
54
|
- - ~>
|
@@ -56,10 +56,10 @@ dependencies:
|
|
56
56
|
version: 0.5.4
|
57
57
|
type: :runtime
|
58
58
|
prerelease: false
|
59
|
-
version_requirements: *
|
59
|
+
version_requirements: *70295293862020
|
60
60
|
- !ruby/object:Gem::Dependency
|
61
61
|
name: tvdeyen-fleximage
|
62
|
-
requirement: &
|
62
|
+
requirement: &70295293859620 !ruby/object:Gem::Requirement
|
63
63
|
none: false
|
64
64
|
requirements:
|
65
65
|
- - ~>
|
@@ -67,10 +67,10 @@ dependencies:
|
|
67
67
|
version: 1.0.9
|
68
68
|
type: :runtime
|
69
69
|
prerelease: false
|
70
|
-
version_requirements: *
|
70
|
+
version_requirements: *70295293859620
|
71
71
|
- !ruby/object:Gem::Dependency
|
72
72
|
name: will_paginate
|
73
|
-
requirement: &
|
73
|
+
requirement: &70295293856680 !ruby/object:Gem::Requirement
|
74
74
|
none: false
|
75
75
|
requirements:
|
76
76
|
- - ~>
|
@@ -78,10 +78,10 @@ dependencies:
|
|
78
78
|
version: '3.0'
|
79
79
|
type: :runtime
|
80
80
|
prerelease: false
|
81
|
-
version_requirements: *
|
81
|
+
version_requirements: *70295293856680
|
82
82
|
- !ruby/object:Gem::Dependency
|
83
83
|
name: acts_as_ferret
|
84
|
-
requirement: &
|
84
|
+
requirement: &70295293869400 !ruby/object:Gem::Requirement
|
85
85
|
none: false
|
86
86
|
requirements:
|
87
87
|
- - ~>
|
@@ -89,10 +89,10 @@ dependencies:
|
|
89
89
|
version: '0.5'
|
90
90
|
type: :runtime
|
91
91
|
prerelease: false
|
92
|
-
version_requirements: *
|
92
|
+
version_requirements: *70295293869400
|
93
93
|
- !ruby/object:Gem::Dependency
|
94
94
|
name: acts_as_list
|
95
|
-
requirement: &
|
95
|
+
requirement: &70295293867480 !ruby/object:Gem::Requirement
|
96
96
|
none: false
|
97
97
|
requirements:
|
98
98
|
- - ~>
|
@@ -100,10 +100,10 @@ dependencies:
|
|
100
100
|
version: '0.1'
|
101
101
|
type: :runtime
|
102
102
|
prerelease: false
|
103
|
-
version_requirements: *
|
103
|
+
version_requirements: *70295293867480
|
104
104
|
- !ruby/object:Gem::Dependency
|
105
105
|
name: magiclabs-userstamp
|
106
|
-
requirement: &
|
106
|
+
requirement: &70295293865640 !ruby/object:Gem::Requirement
|
107
107
|
none: false
|
108
108
|
requirements:
|
109
109
|
- - ~>
|
@@ -111,10 +111,10 @@ dependencies:
|
|
111
111
|
version: 2.0.2
|
112
112
|
type: :runtime
|
113
113
|
prerelease: false
|
114
|
-
version_requirements: *
|
114
|
+
version_requirements: *70295293865640
|
115
115
|
- !ruby/object:Gem::Dependency
|
116
116
|
name: dynamic_form
|
117
|
-
requirement: &
|
117
|
+
requirement: &70295293864160 !ruby/object:Gem::Requirement
|
118
118
|
none: false
|
119
119
|
requirements:
|
120
120
|
- - ~>
|
@@ -122,10 +122,10 @@ dependencies:
|
|
122
122
|
version: '1.1'
|
123
123
|
type: :runtime
|
124
124
|
prerelease: false
|
125
|
-
version_requirements: *
|
125
|
+
version_requirements: *70295293864160
|
126
126
|
- !ruby/object:Gem::Dependency
|
127
127
|
name: jquery-rails
|
128
|
-
requirement: &
|
128
|
+
requirement: &70295293863160 !ruby/object:Gem::Requirement
|
129
129
|
none: false
|
130
130
|
requirements:
|
131
131
|
- - ~>
|
@@ -133,10 +133,10 @@ dependencies:
|
|
133
133
|
version: 1.0.16
|
134
134
|
type: :runtime
|
135
135
|
prerelease: false
|
136
|
-
version_requirements: *
|
136
|
+
version_requirements: *70295293863160
|
137
137
|
- !ruby/object:Gem::Dependency
|
138
138
|
name: attachment_magic
|
139
|
-
requirement: &
|
139
|
+
requirement: &70295293876280 !ruby/object:Gem::Requirement
|
140
140
|
none: false
|
141
141
|
requirements:
|
142
142
|
- - ~>
|
@@ -144,10 +144,10 @@ dependencies:
|
|
144
144
|
version: 0.2.1
|
145
145
|
type: :runtime
|
146
146
|
prerelease: false
|
147
|
-
version_requirements: *
|
147
|
+
version_requirements: *70295293876280
|
148
148
|
- !ruby/object:Gem::Dependency
|
149
149
|
name: rspec-rails
|
150
|
-
requirement: &
|
150
|
+
requirement: &70295293872400 !ruby/object:Gem::Requirement
|
151
151
|
none: false
|
152
152
|
requirements:
|
153
153
|
- - ~>
|
@@ -155,10 +155,10 @@ dependencies:
|
|
155
155
|
version: '2.8'
|
156
156
|
type: :development
|
157
157
|
prerelease: false
|
158
|
-
version_requirements: *
|
158
|
+
version_requirements: *70295293872400
|
159
159
|
- !ruby/object:Gem::Dependency
|
160
160
|
name: sqlite3
|
161
|
-
requirement: &
|
161
|
+
requirement: &70295293884580 !ruby/object:Gem::Requirement
|
162
162
|
none: false
|
163
163
|
requirements:
|
164
164
|
- - ! '>='
|
@@ -166,7 +166,7 @@ dependencies:
|
|
166
166
|
version: '0'
|
167
167
|
type: :development
|
168
168
|
prerelease: false
|
169
|
-
version_requirements: *
|
169
|
+
version_requirements: *70295293884580
|
170
170
|
description: Alchemy is a Rails 3 CMS with a flexible content storing architecture.
|
171
171
|
email:
|
172
172
|
- alchemy@magiclabs.de
|
@@ -674,6 +674,7 @@ files:
|
|
674
674
|
- spec/integration/security_spec.rb
|
675
675
|
- spec/models/content_spec.rb
|
676
676
|
- spec/models/element_spec.rb
|
677
|
+
- spec/models/essence_picture_spec.rb
|
677
678
|
- spec/models/essence_richtext_spec.rb
|
678
679
|
- spec/models/language_spec.rb
|
679
680
|
- spec/models/page_spec.rb
|
@@ -807,7 +808,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
807
808
|
version: '0'
|
808
809
|
segments:
|
809
810
|
- 0
|
810
|
-
hash:
|
811
|
+
hash: -3492770316894394278
|
811
812
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
812
813
|
none: false
|
813
814
|
requirements:
|
@@ -816,7 +817,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
816
817
|
version: '0'
|
817
818
|
segments:
|
818
819
|
- 0
|
819
|
-
hash:
|
820
|
+
hash: -3492770316894394278
|
820
821
|
requirements:
|
821
822
|
- ImageMagick (libmagick), v6.6 or greater.
|
822
823
|
rubyforge_project:
|
@@ -882,6 +883,7 @@ test_files:
|
|
882
883
|
- spec/integration/security_spec.rb
|
883
884
|
- spec/models/content_spec.rb
|
884
885
|
- spec/models/element_spec.rb
|
886
|
+
- spec/models/essence_picture_spec.rb
|
885
887
|
- spec/models/essence_richtext_spec.rb
|
886
888
|
- spec/models/language_spec.rb
|
887
889
|
- spec/models/page_spec.rb
|