alchemy_cms 2.0.rc3 → 2.0.rc4
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/.gitignore +3 -1
- data/.rspec +1 -2
- data/.travis.yml +11 -0
- data/.yardopts +0 -1
- data/Gemfile +1 -2
- data/README.md +14 -0
- data/alchemy_cms.gemspec +4 -2
- data/app/controllers/admin/clipboard_controller.rb +8 -9
- data/app/controllers/admin/contents_controller.rb +4 -2
- data/app/controllers/admin/essence_pictures_controller.rb +2 -2
- data/app/controllers/admin/layoutpages_controller.rb +2 -0
- data/app/controllers/admin/pages_controller.rb +5 -5
- data/app/controllers/admin/pictures_controller.rb +2 -1
- data/app/controllers/admin/trash_controller.rb +2 -0
- data/app/controllers/alchemy_controller.rb +10 -4
- data/app/controllers/elements_controller.rb +1 -1
- data/app/helpers/admin/elements_helper.rb +32 -1
- data/app/helpers/alchemy_helper.rb +15 -818
- data/app/helpers/contents_helper.rb +69 -0
- data/app/helpers/elements_helper.rb +161 -0
- data/app/helpers/essences_helper.rb +167 -0
- data/app/helpers/pages_helper.rb +401 -19
- data/app/models/attachment.rb +4 -0
- data/app/models/element.rb +27 -14
- data/app/models/page.rb +75 -38
- data/app/views/admin/essence_pictures/destroy.js.erb +1 -1
- data/app/views/admin/pages/_create_language_form.html.erb +2 -1
- data/app/views/admin/pages/new.html.erb +1 -1
- data/app/views/admin/pages/update.js.erb +1 -1
- data/app/views/admin/partials/_upload_form.html.erb +2 -2
- data/app/views/admin/pictures/index.html.erb +7 -4
- data/app/views/essences/_essence_picture_editor.html.erb +1 -3
- data/app/views/layouts/alchemy.html.erb +59 -59
- data/app/views/layouts/pages.html.erb +2 -4
- data/app/views/{partials/_navigation_image_link.html.erb → navigation/_image_link.html.erb} +0 -0
- data/app/views/{partials/_navigation_link.html.erb → navigation/_link.html.erb} +1 -1
- data/app/views/{partials/_navigation_renderer.html.erb → navigation/_renderer.html.erb} +0 -0
- data/app/views/page_layouts/_contact.html.erb +1 -1
- data/app/views/page_layouts/_external.html.erb +0 -1
- data/app/views/page_layouts/_intro.html.erb +1 -1
- data/app/views/page_layouts/_news.html.erb +1 -1
- data/app/views/page_layouts/_search.html.erb +1 -1
- data/app/views/page_layouts/_standard.html.erb +1 -1
- data/assets/images/icons.png +0 -0
- data/assets/javascripts/tiny_mce/plugins/inlinepopups/skins/alchemy/window.css +49 -31
- data/assets/stylesheets/alchemy.css +111 -91
- data/assets/stylesheets/elements.css +12 -16
- data/bin/alchemy +1 -1
- data/config/alchemy/config.yml +4 -0
- data/config/initializers/tinymce_hammer.rb +1 -0
- data/config/locales/de.yml +3 -1
- data/config/locales/en.yml +2 -0
- data/config/routes.rb +6 -4
- data/lib/alchemy/capistrano.rb +4 -7
- data/lib/alchemy/page_layout.rb +12 -8
- data/lib/alchemy/version.rb +1 -1
- data/spec/controllers/admin/clipboard_controller_spec.rb +23 -0
- data/spec/dummy/db/schema.rb +9 -9
- data/spec/factories.rb +24 -6
- data/spec/helpers/admin/elements_helper_spec.rb +20 -0
- data/spec/helpers/alchemy_helper_spec.rb +41 -0
- data/spec/helpers/contents_helper_spec.rb +27 -0
- data/spec/helpers/elements_helper_spec.rb +39 -0
- data/spec/helpers/essences_helper_spec.rb +49 -0
- data/spec/helpers/pages_helper_spec.rb +140 -0
- data/spec/integration/security_spec.rb +1 -1
- data/spec/integration/standardset_spec.rb +29 -0
- data/spec/models/element_spec.rb +49 -0
- data/spec/{language_spec.rb → models/language_spec.rb} +0 -0
- data/spec/models/page_spec.rb +139 -0
- data/spec/{user_spec.rb → models/user_spec.rb} +0 -0
- data/spec/page_layout_spec.rb +21 -0
- data/spec/routing_spec.rb +53 -0
- data/spec/spec_helper.rb +12 -11
- metadata +54 -303
- data/spec/dummy/config/alchemy/config.yml +0 -199
- data/spec/dummy/config/alchemy/elements.yml +0 -91
- data/spec/dummy/config/alchemy/page_layouts.yml +0 -29
- data/spec/dummy/public/images/alchemy/ajax_loader.gif +0 -0
- data/spec/dummy/public/images/alchemy/alchemy-logo.png +0 -0
- data/spec/dummy/public/images/alchemy/flags.png +0 -0
- data/spec/dummy/public/images/alchemy/gui/navi-tab.png +0 -0
- data/spec/dummy/public/images/alchemy/gui/shading.png +0 -0
- data/spec/dummy/public/images/alchemy/gui/shading_90.png +0 -0
- data/spec/dummy/public/images/alchemy/gui/toggle.png +0 -0
- data/spec/dummy/public/images/alchemy/icons.png +0 -0
- data/spec/dummy/public/images/alchemy/jquery-sb/select_arrow.gif +0 -0
- data/spec/dummy/public/images/alchemy/jquery-sb/select_arrow_bg.gif +0 -0
- data/spec/dummy/public/images/alchemy/jquery-sb/select_arrow_bg_hover.gif +0 -0
- data/spec/dummy/public/images/alchemy/jquery-ui/ui-icons_666666_256x240.png +0 -0
- data/spec/dummy/public/images/alchemy/placeholder.png +0 -0
- data/spec/dummy/public/images/alchemy/swfupload/browse_button.png +0 -0
- data/spec/dummy/public/javascripts/alchemy/alchemy.element_editor_selector.js +0 -88
- data/spec/dummy/public/javascripts/alchemy/alchemy.growler.js +0 -44
- data/spec/dummy/public/javascripts/alchemy/alchemy.image_cropper.js +0 -56
- data/spec/dummy/public/javascripts/alchemy/alchemy.js +0 -892
- data/spec/dummy/public/javascripts/alchemy/alchemy.link_overlay.js +0 -221
- data/spec/dummy/public/javascripts/alchemy/alchemy.page_sorter.js +0 -42
- data/spec/dummy/public/javascripts/alchemy/alchemy.preview.js +0 -145
- data/spec/dummy/public/javascripts/alchemy/jquery-ui.js +0 -428
- data/spec/dummy/public/javascripts/alchemy/jquery.Jcrop.min.js +0 -246
- data/spec/dummy/public/javascripts/alchemy/jquery.dialogextend.min.js +0 -8
- data/spec/dummy/public/javascripts/alchemy/jquery.in-place-edit.js +0 -171
- data/spec/dummy/public/javascripts/alchemy/jquery.js +0 -18
- data/spec/dummy/public/javascripts/alchemy/jquery.rails.js +0 -315
- data/spec/dummy/public/javascripts/alchemy/jquery.sb.min.js +0 -14
- data/spec/dummy/public/javascripts/alchemy/jquery.scrollTo-1.4.2-min.js +0 -11
- data/spec/dummy/public/javascripts/alchemy/jquery.ui.nestedSortable.js +0 -291
- data/spec/dummy/public/javascripts/alchemy/jquery.ui.tabspaging.js +0 -281
- data/spec/dummy/public/javascripts/alchemy/swfupload/fileprogress.js +0 -203
- data/spec/dummy/public/javascripts/alchemy/swfupload/handlers.js +0 -171
- data/spec/dummy/public/javascripts/alchemy/swfupload/queue.js +0 -98
- data/spec/dummy/public/javascripts/alchemy/swfupload/swfupload.js +0 -980
- data/spec/dummy/public/javascripts/alchemy/swfupload/swfupload.swf +0 -0
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/jquery.tinymce.js +0 -1
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/langs/de.js +0 -1
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/langs/en.js +0 -223
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/license.txt +0 -504
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/plugins/alchemy_link/editor_plugin.js +0 -43
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/plugins/alchemy_link/langs/de.js +0 -4
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/plugins/alchemy_link/langs/en.js +0 -4
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/plugins/fullscreen/editor_plugin.js +0 -1
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/plugins/fullscreen/fullscreen.htm +0 -109
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/plugins/inlinepopups/editor_plugin.js +0 -1
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/plugins/inlinepopups/skins/alchemy/window.css +0 -402
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/plugins/inlinepopups/template.htm +0 -387
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/plugins/lists/editor_plugin.js +0 -1
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/plugins/paste/editor_plugin.js +0 -1
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/plugins/paste/js/pastetext.js +0 -36
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/plugins/paste/js/pasteword.js +0 -51
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/plugins/paste/langs/de_dlg.js +0 -1
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/plugins/paste/langs/en_dlg.js +0 -5
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/plugins/paste/pastetext.htm +0 -27
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/plugins/paste/pasteword.htm +0 -21
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/plugins/table/cell.htm +0 -180
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/plugins/table/css/cell.css +0 -17
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/plugins/table/css/row.css +0 -25
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/plugins/table/css/table.css +0 -13
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/plugins/table/editor_plugin.js +0 -1
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/plugins/table/js/cell.js +0 -319
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/plugins/table/js/merge_cells.js +0 -27
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/plugins/table/js/row.js +0 -237
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/plugins/table/js/table.js +0 -450
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/plugins/table/langs/de_dlg.js +0 -1
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/plugins/table/langs/en_dlg.js +0 -75
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/plugins/table/merge_cells.htm +0 -32
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/plugins/table/row.htm +0 -158
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/plugins/table/table.htm +0 -188
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/about.htm +0 -52
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/anchor.htm +0 -26
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/charmap.htm +0 -51
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/color_picker.htm +0 -74
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/editor_template.js +0 -1
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/image.htm +0 -80
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/img/colorpicker.jpg +0 -0
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/img/flash.gif +0 -0
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/img/icons.gif +0 -0
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/img/iframe.gif +0 -0
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/img/pagebreak.gif +0 -0
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/img/quicktime.gif +0 -0
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/img/realmedia.gif +0 -0
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/img/shockwave.gif +0 -0
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/img/trans.gif +0 -0
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/img/video.gif +0 -0
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/img/windowsmedia.gif +0 -0
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/js/about.js +0 -73
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/js/anchor.js +0 -42
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/js/charmap.js +0 -355
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/js/color_picker.js +0 -329
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/js/image.js +0 -247
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/js/link.js +0 -153
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/js/source_editor.js +0 -56
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/langs/de.js +0 -1
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/langs/de_dlg.js +0 -1
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/langs/en.js +0 -68
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/langs/en_dlg.js +0 -54
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/link.htm +0 -57
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/shortcuts.htm +0 -47
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/skins/default/content.css +0 -47
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/skins/default/dialog.css +0 -117
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/skins/default/img/buttons.png +0 -0
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/skins/default/img/items.gif +0 -0
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/skins/default/img/menu_arrow.gif +0 -0
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/skins/default/img/menu_check.gif +0 -0
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/skins/default/img/progress.gif +0 -0
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/skins/default/img/tabs.gif +0 -0
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/skins/default/ui.css +0 -214
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/skins/highcontrast/content.css +0 -23
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/skins/highcontrast/dialog.css +0 -105
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/skins/highcontrast/ui.css +0 -102
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/skins/o2k7/content.css +0 -46
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/skins/o2k7/dialog.css +0 -117
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/skins/o2k7/img/button_bg.png +0 -0
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/skins/o2k7/img/button_bg_black.png +0 -0
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/skins/o2k7/img/button_bg_silver.png +0 -0
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/skins/o2k7/ui.css +0 -217
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/skins/o2k7/ui_black.css +0 -8
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/skins/o2k7/ui_silver.css +0 -5
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/source_editor.htm +0 -25
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/simple/langs/de.js +0 -1
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/tiny_mce.js +0 -1
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/tiny_mce_popup.js +0 -5
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/utils/editable_selects.js +0 -70
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/utils/form_utils.js +0 -210
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/utils/mctabs.js +0 -162
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/utils/validate.js +0 -252
- data/spec/dummy/public/stylesheets/alchemy/Jcrop.gif +0 -0
- data/spec/dummy/public/stylesheets/alchemy/alchemy.css +0 -3653
- data/spec/dummy/public/stylesheets/alchemy/alchemy_tinymce_content.css +0 -94
- data/spec/dummy/public/stylesheets/alchemy/alchemy_tinymce_dialog.css +0 -415
- data/spec/dummy/public/stylesheets/alchemy/default/img/tabs.gif +0 -0
- data/spec/dummy/public/stylesheets/alchemy/elements.css +0 -900
- data/spec/dummy/public/stylesheets/alchemy/flags.css +0 -1
- data/spec/dummy/public/stylesheets/alchemy/ie6.css +0 -18
- data/spec/dummy/public/stylesheets/alchemy/jquery-ui-1.8.7.alchemy.css +0 -2023
- data/spec/dummy/public/stylesheets/alchemy/jquery.Jcrop.css +0 -35
- data/spec/dummy/public/stylesheets/alchemy/jquery.sb.css +0 -244
- data/spec/dummy/public/stylesheets/alchemy/standard_set.css +0 -374
- data/spec/page_spec.rb +0 -50
data/app/models/attachment.rb
CHANGED
data/app/models/element.rb
CHANGED
|
@@ -17,7 +17,10 @@ class Element < ActiveRecord::Base
|
|
|
17
17
|
|
|
18
18
|
# TODO: add a trashed column to elements table
|
|
19
19
|
scope :trashed, where(:page_id => nil).order('updated_at DESC')
|
|
20
|
-
|
|
20
|
+
scope :published, where(:public => true)
|
|
21
|
+
scope :named, lambda { |names| where(arel_table[:name].in(names)) }
|
|
22
|
+
scope :excluded, lambda { |names| where(arel_table[:name].not_in(names)) }
|
|
23
|
+
|
|
21
24
|
# Returns next Element on self.page or nil. Pass a Element.name to get next of this kind.
|
|
22
25
|
def next(name = nil)
|
|
23
26
|
if name.nil?
|
|
@@ -38,13 +41,15 @@ class Element < ActiveRecord::Base
|
|
|
38
41
|
self.class.where(find_conditions).order("position DESC").limit(1)
|
|
39
42
|
end
|
|
40
43
|
|
|
41
|
-
|
|
44
|
+
# Stores the page into `to_be_sweeped_pages` (Pages that have to be sweeped after updating element).
|
|
45
|
+
def store_page(page)
|
|
46
|
+
return true if page.nil?
|
|
42
47
|
unless self.to_be_sweeped_pages.include? page
|
|
43
48
|
self.to_be_sweeped_pages << page
|
|
44
49
|
self.save
|
|
45
50
|
end
|
|
46
51
|
end
|
|
47
|
-
|
|
52
|
+
|
|
48
53
|
# nullifies the page_id aka. trashs it.
|
|
49
54
|
def trash
|
|
50
55
|
self.page_id = nil
|
|
@@ -104,14 +109,23 @@ class Element < ActiveRecord::Base
|
|
|
104
109
|
copy
|
|
105
110
|
end
|
|
106
111
|
|
|
112
|
+
# Returns the descriptions from elements.yml file.
|
|
113
|
+
# Alchemy comes with its own elements.yml file. As so called standard set.
|
|
114
|
+
# Place a elements.yml file inside your apps config/alchemy folder to define
|
|
115
|
+
# your own set of elements
|
|
107
116
|
def self.descriptions
|
|
108
117
|
if File.exists? "#{Rails.root}/config/alchemy/elements.yml"
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
118
|
+
element_definitions = YAML.load_file( "#{Rails.root}/config/alchemy/elements.yml" )
|
|
119
|
+
end
|
|
120
|
+
if !element_definitions
|
|
121
|
+
if File.exists?(File.join(File.dirname(__FILE__), "../../config/alchemy/elements.yml"))
|
|
122
|
+
element_definitions = YAML.load_file( File.join(File.dirname(__FILE__), "../../config/alchemy/elements.yml") )
|
|
123
|
+
end
|
|
124
|
+
end
|
|
125
|
+
if !element_definitions
|
|
126
|
+
raise LoadError, "Could not find elements.yml file! Please run: rails generate alchemy:scaffold"
|
|
127
|
+
end
|
|
128
|
+
element_definitions
|
|
115
129
|
end
|
|
116
130
|
|
|
117
131
|
def self.definitions
|
|
@@ -148,7 +162,6 @@ class Element < ActiveRecord::Base
|
|
|
148
162
|
|
|
149
163
|
# returns the description of the element with my name in element.yml
|
|
150
164
|
def description
|
|
151
|
-
return nil if Element.descriptions.blank?
|
|
152
165
|
Element.descriptions.detect{ |d| d['name'] == self.name }
|
|
153
166
|
end
|
|
154
167
|
|
|
@@ -390,13 +403,14 @@ private
|
|
|
390
403
|
end
|
|
391
404
|
|
|
392
405
|
def self.all_definitions_for(element_names)
|
|
406
|
+
return [] if element_names.blank?
|
|
393
407
|
if element_names.to_s == "all"
|
|
394
408
|
return element_descriptions
|
|
395
409
|
else
|
|
396
410
|
return definitions.select { |e| element_names.include? e['name'] }
|
|
397
411
|
end
|
|
398
412
|
end
|
|
399
|
-
|
|
413
|
+
|
|
400
414
|
# makes a copy of source and makes copies of the contents from source
|
|
401
415
|
def self.copy(source, differences = {})
|
|
402
416
|
attributes = source.attributes.except("id").merge(differences)
|
|
@@ -410,12 +424,11 @@ private
|
|
|
410
424
|
|
|
411
425
|
# creates the contents for this element as described in the elements.yml
|
|
412
426
|
def create_contents
|
|
413
|
-
element_scratch = description
|
|
414
427
|
contents = []
|
|
415
|
-
if
|
|
428
|
+
if description["contents"].blank?
|
|
416
429
|
logger.warn "\n++++++\nWARNING! Could not find any content descriptions for element: #{self.name}\n++++++++\n"
|
|
417
430
|
else
|
|
418
|
-
|
|
431
|
+
description["contents"].each do |content_hash|
|
|
419
432
|
contents << Content.create_from_scratch(self, content_hash.symbolize_keys)
|
|
420
433
|
end
|
|
421
434
|
end
|
data/app/models/page.rb
CHANGED
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
# encoding: UTF-8
|
|
2
2
|
class Page < ActiveRecord::Base
|
|
3
|
+
|
|
4
|
+
RESERVED_PAGE_LAYOUTS = %w(rootpage)
|
|
5
|
+
RESERVED_URLNAMES = %w(admin messages)
|
|
3
6
|
|
|
4
7
|
acts_as_nested_set
|
|
5
8
|
stampable
|
|
@@ -12,8 +15,11 @@ class Page < ActiveRecord::Base
|
|
|
12
15
|
|
|
13
16
|
validates_presence_of :name, :message => N_("please enter a name")
|
|
14
17
|
validates_presence_of :page_layout, :message => N_("Please choose a page layout.")
|
|
18
|
+
validates_presence_of :parent_id, :message => N_("No parent page was given."), :unless => :rootpage?
|
|
15
19
|
validates_length_of :urlname, :minimum => 3, :too_short => N_("urlname_to_short"), :if => :urlname_entered?
|
|
16
20
|
validates_uniqueness_of :urlname, :message => N_("URL-Name already token"), :scope => 'language_id', :if => :urlname_entered?
|
|
21
|
+
validates :page_layout, :exclusion => { :in => RESERVED_PAGE_LAYOUTS, :message => N_("This page_layout name is reserved.") }, :unless => :rootpage?
|
|
22
|
+
validates :urlname, :exclusion => { :in => RESERVED_URLNAMES, :message => N_("This urlname is reserved.") }
|
|
17
23
|
|
|
18
24
|
attr_accessor :do_not_autogenerate
|
|
19
25
|
attr_accessor :do_not_sweep
|
|
@@ -34,7 +40,7 @@ class Page < ActiveRecord::Base
|
|
|
34
40
|
scope :accessable, where(:restricted => false)
|
|
35
41
|
scope :restricted, where(:restricted => true)
|
|
36
42
|
scope :public_language_roots, lambda {
|
|
37
|
-
|
|
43
|
+
where(:language_root => true).where("language_code IN ('#{Language.all_codes_for_published.join('\',\'')}')").where(:public => true)
|
|
38
44
|
}
|
|
39
45
|
scope :all_last_edited_from, lambda { |user| where(:updater_id => user.id).order('updated_at DESC').limit(5) }
|
|
40
46
|
|
|
@@ -44,24 +50,37 @@ class Page < ActiveRecord::Base
|
|
|
44
50
|
|
|
45
51
|
scope :contentpages, where("pages.layoutpage = 0 AND pages.parent_id IS NOT NULL")
|
|
46
52
|
|
|
47
|
-
# Finds selected elements from page
|
|
48
|
-
#
|
|
49
|
-
#
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
53
|
+
# Finds selected elements from page.
|
|
54
|
+
#
|
|
55
|
+
# Options are:
|
|
56
|
+
#
|
|
57
|
+
# :only => Array of element names # Returns only elements with given names
|
|
58
|
+
# :except => Array of element names # Returns all elements except the ones with given names
|
|
59
|
+
# :count => Integer # Limit the count of returned elements
|
|
60
|
+
# :offset => Integer # Starts with an offset while returning elements
|
|
61
|
+
# :random => Boolean # Returning elements randomly shuffled
|
|
62
|
+
#
|
|
63
|
+
# Returns only public elements by default.
|
|
64
|
+
# Pass true as second argument to get all elements.
|
|
65
|
+
#
|
|
66
|
+
def find_selected_elements(options = {}, show_non_public = false)
|
|
67
|
+
elements = self.elements
|
|
68
|
+
if !options[:only].blank?
|
|
69
|
+
elements = self.elements.named(options[:only])
|
|
70
|
+
elsif !options[:except].blank?
|
|
71
|
+
elements = self.elements.excluded(options[:except])
|
|
72
|
+
end
|
|
73
|
+
elements = elements.offset(options[:offset]).limit(options[:count])
|
|
74
|
+
elements = elements.order("RAND()") if options[:random]
|
|
75
|
+
if show_non_public
|
|
76
|
+
elements
|
|
56
77
|
else
|
|
57
|
-
|
|
78
|
+
elements.published
|
|
58
79
|
end
|
|
59
|
-
elements = self.elements.where(condition).limit(options[:count]).offset(options[:offset])
|
|
60
|
-
elements.order("RAND()") unless options[:random].blank?
|
|
61
|
-
elements
|
|
62
80
|
end
|
|
63
81
|
|
|
64
|
-
def find_elements(options, show_non_public = false)
|
|
82
|
+
def find_elements(options = {}, show_non_public = false) #:nodoc:
|
|
83
|
+
# TODO: What is this? A Kind of proxy method? Why not rendering the elements directly if you already have them????
|
|
65
84
|
if !options[:collection].blank? && options[:collection].is_a?(Array)
|
|
66
85
|
all_elements = options[:collection]
|
|
67
86
|
else
|
|
@@ -69,7 +88,7 @@ class Page < ActiveRecord::Base
|
|
|
69
88
|
end
|
|
70
89
|
all_elements
|
|
71
90
|
end
|
|
72
|
-
|
|
91
|
+
|
|
73
92
|
def elements_grouped_by_cells
|
|
74
93
|
group = ActiveSupport::OrderedHash.new
|
|
75
94
|
cells.each { |cell| group[cell] = cell.elements }
|
|
@@ -324,30 +343,39 @@ class Page < ActiveRecord::Base
|
|
|
324
343
|
self.language_roots.find_by_language_id(language_id)
|
|
325
344
|
end
|
|
326
345
|
|
|
327
|
-
# Creates a copy of source (
|
|
346
|
+
# Creates a copy of source (a Page object) and does a copy of all elements depending to source.
|
|
328
347
|
# You can pass any kind of Page#attributes as a difference to source.
|
|
329
348
|
# Notice: It prevents the element auto_generator from running.
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
349
|
+
def self.copy(source, differences = {})
|
|
350
|
+
attributes = source.attributes.symbolize_keys.merge(differences)
|
|
351
|
+
attributes.merge!(
|
|
352
|
+
:do_not_autogenerate => true,
|
|
353
|
+
:do_not_sweep => true,
|
|
354
|
+
:visible => false,
|
|
355
|
+
:public => false,
|
|
356
|
+
:locked => false,
|
|
357
|
+
:locked_by => nil
|
|
358
|
+
)
|
|
359
|
+
page = self.new(attributes.except(["id", "updated_at", "created_at", "created_id", "updater_id"]))
|
|
360
|
+
if page.save
|
|
361
|
+
# copy the page´s cells
|
|
362
|
+
source.cells.each do |cell|
|
|
363
|
+
new_cell = Cell.create(:name => cell.name, :page_id => page.id)
|
|
364
|
+
end
|
|
365
|
+
# copy the page´s elements
|
|
366
|
+
source.elements.each do |element|
|
|
367
|
+
# detect cell for element
|
|
368
|
+
# if cell is nil also pass nil to element.cell_id
|
|
369
|
+
cell = nil
|
|
370
|
+
cell = page.cells.detect{ |c| c.name == element.cell.name } if element.cell
|
|
371
|
+
new_element = Element.copy(element, :page_id => page.id, :cell_id => (cell.blank? ? nil : cell.id))
|
|
372
|
+
new_element.move_to_bottom
|
|
373
|
+
end
|
|
374
|
+
return page
|
|
375
|
+
else
|
|
376
|
+
raise page.errors.full_messages
|
|
377
|
+
end
|
|
378
|
+
end
|
|
351
379
|
|
|
352
380
|
# Gets the language_root page for page
|
|
353
381
|
def get_language_root
|
|
@@ -432,6 +460,15 @@ class Page < ActiveRecord::Base
|
|
|
432
460
|
return N_('unknown') if self.locker.nil?
|
|
433
461
|
self.locker.name
|
|
434
462
|
end
|
|
463
|
+
|
|
464
|
+
# is the curent object the main rootpage?
|
|
465
|
+
def rootpage?
|
|
466
|
+
(self.page_layout == "rootpage") && self.parent_id.blank?
|
|
467
|
+
end
|
|
468
|
+
|
|
469
|
+
def self.rootpage
|
|
470
|
+
where(:page_layout => 'rootpage').where(:parent_id => nil).first
|
|
471
|
+
end
|
|
435
472
|
|
|
436
473
|
private
|
|
437
474
|
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
$('#essence_picture_<%= @content_id -%>').remove();
|
|
4
4
|
Alchemy.SortableContents('#element_<%= @element.id -%>_contents', '<%= form_authenticity_token -%>');
|
|
5
5
|
|
|
6
|
-
<%- if
|
|
6
|
+
<%- if max_image_count.blank? || (@essence_pictures.length < max_image_count) -%>
|
|
7
7
|
$('#element_<%= @element.id -%>_contents').append('<%= escape_javascript(
|
|
8
8
|
render(
|
|
9
9
|
:partial => "admin/elements/add_content",
|
|
@@ -33,10 +33,11 @@
|
|
|
33
33
|
<%= form.hidden_field :language_code, :value => lang.code %>
|
|
34
34
|
<%= form.hidden_field :page_layout, :value => lang.page_layout %>
|
|
35
35
|
<%= form.hidden_field :language_root, :value => true %>
|
|
36
|
+
<%= form.hidden_field :parent_id, :value => Page.rootpage.id %>
|
|
36
37
|
<%= form.submit(_("%{language}_as_new_language") % {:language => lang.name}, :class => 'button', :onclick => 'Alchemy.pleaseWaitOverlay();') %>
|
|
37
38
|
<% end %>
|
|
38
39
|
<%- end -%>
|
|
39
40
|
<%- else -%>
|
|
40
|
-
<p
|
|
41
|
+
<p><%= _("Actually this language does not exist. Please create this language first.") %></p>
|
|
41
42
|
<%- end -%>
|
|
42
43
|
</div>
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
</div>
|
|
13
13
|
<div id="paste_page_tab">
|
|
14
14
|
<%= form_for([:admin, @page], :remote => true, :html => {:id => 'paste_page_form'}) do |f| %>
|
|
15
|
-
<%= f.hidden_field(
|
|
15
|
+
<%= f.hidden_field(:parent_id) %>
|
|
16
16
|
<table id="new_page_form">
|
|
17
17
|
<tr>
|
|
18
18
|
<td class="label very_long">
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
Alchemy.closeCurrentWindow();
|
|
3
3
|
<%- if request.referer.include?('edit') -%>
|
|
4
4
|
Alchemy.reloadPreview();
|
|
5
|
-
$('#<%= dom_id(@page) -%>_status').replaceWith(<%= escape_javascript(render(:partial =>
|
|
5
|
+
$('#<%= dom_id(@page) -%>_status').replaceWith('<%= escape_javascript(render(:partial => "page_status")) -%>');
|
|
6
6
|
<%- else -%>
|
|
7
7
|
$('#<%= dom_id(@page) -%> > .sitemap_page > .sitemap_sitename .sitemap_pagename_link').text('<%= @page.name -%>');
|
|
8
8
|
<%- if @page.locked? && @page.locker == current_user -%>
|
|
@@ -74,10 +74,10 @@
|
|
|
74
74
|
flash9_url : "/javascripts/alchemy/swfupload/swfupload.swf",
|
|
75
75
|
upload_url: '<%= new_asset_path_with_session_information(model_name) %>',
|
|
76
76
|
post_params: <%= post_params.html_safe %>,
|
|
77
|
-
file_size_limit : "
|
|
77
|
+
file_size_limit : "<%= configuration(:uploader)[:file_size_limit] -%> MB",
|
|
78
78
|
file_types : '<%= file_types.map{ |f| "*.#{f}" }.join(";") %>',
|
|
79
79
|
file_types_description : "<%= file_types_description %>",
|
|
80
|
-
file_upload_limit :
|
|
80
|
+
file_upload_limit : <%= configuration(:uploader)[:upload_limit] -%>,
|
|
81
81
|
file_queue_limit : 0,
|
|
82
82
|
custom_settings : {
|
|
83
83
|
progressTarget : "uploadProgressContainer",
|
|
@@ -56,11 +56,11 @@
|
|
|
56
56
|
<%= link_to(
|
|
57
57
|
content_tag('span', '', :class => 'icon flush'),
|
|
58
58
|
flush_admin_pictures_path,
|
|
59
|
-
:before => 'Alchemy.pleaseWaitOverlay();',
|
|
60
|
-
:complete => 'Alchemy.pleaseWaitOverlay(false);',
|
|
61
59
|
:class => 'icon_button',
|
|
62
60
|
:remote => true,
|
|
63
|
-
:
|
|
61
|
+
:method => :post,
|
|
62
|
+
:title => _('Flush picture cache'),
|
|
63
|
+
:id => 'flush_picture_cache_button'
|
|
64
64
|
) -%><br />
|
|
65
65
|
<label><%= _('Flush picture cache') %></label>
|
|
66
66
|
</div>
|
|
@@ -75,11 +75,14 @@
|
|
|
75
75
|
<%- content_for :javascripts do -%>
|
|
76
76
|
<script type="text/javascript" charset="utf-8">
|
|
77
77
|
|
|
78
|
-
jQuery(document).ready(function() {
|
|
78
|
+
jQuery(document).ready(function($) {
|
|
79
79
|
Alchemy.inPlaceEditor({
|
|
80
80
|
save_label: "<%= _('save') %>",
|
|
81
81
|
cancel_label: "<%= _('cancel') %>"
|
|
82
82
|
});
|
|
83
|
+
$('#flush_picture_cache_button').click(function() {
|
|
84
|
+
Alchemy.pleaseWaitOverlay();
|
|
85
|
+
});
|
|
83
86
|
});
|
|
84
87
|
|
|
85
88
|
</script>
|
|
@@ -1,60 +1,60 @@
|
|
|
1
|
-
<!DOCTYPE
|
|
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
|
-
|
|
1
|
+
<!DOCTYPE>
|
|
2
|
+
<html>
|
|
3
|
+
<head>
|
|
4
|
+
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
|
|
5
|
+
<meta http-equiv="content-language" content="<%= current_user.language.blank? ? 'de' : current_user.language rescue 'de' %>">
|
|
6
|
+
<title><%= render_alchemy_title %></title>
|
|
7
|
+
<%= csrf_meta_tag %>
|
|
8
|
+
<!--[if IE 6]><link rel="stylesheet" type="text/css" href="/plugin_assets/stylesheets/ie6.css" /><![endif]-->
|
|
9
|
+
<%= yield :stylesheets %>
|
|
10
|
+
<%= yield :javascript_includes %>
|
|
11
|
+
<script type="text/javascript" charset="utf-8">
|
|
12
|
+
// <![CDATA[
|
|
13
|
+
if(typeof(jQuery)=='function') {
|
|
14
|
+
jQuery.noConflict();
|
|
15
|
+
}
|
|
16
|
+
// ]]>
|
|
17
|
+
</script>
|
|
18
|
+
</head>
|
|
19
|
+
|
|
20
|
+
<body id="alchemy">
|
|
21
|
+
<%#= overlay for indication of loading %>
|
|
22
|
+
<div id="overlay">
|
|
23
|
+
<div id="overlay_text_box">
|
|
24
|
+
<%= image_tag('alchemy/ajax_loader.gif', :id => 'ajax_loader') %>
|
|
25
|
+
<span id="overlay_text"><%= _("please_wait") %></span>
|
|
26
|
+
</div>
|
|
27
|
+
</div>
|
|
28
|
+
<%#= overlay end %>
|
|
29
|
+
<div id="corner"></div>
|
|
30
|
+
<div id="main_menu">
|
|
31
|
+
<div id="main_navi">
|
|
32
|
+
<%= yield(:navigation) %>
|
|
33
|
+
<%= admin_main_navigation %>
|
|
34
|
+
</div>
|
|
35
|
+
<div id="main_menu_background"></div>
|
|
36
|
+
<div id="logout">
|
|
37
|
+
<%= link_to_overlay_window("<span class='module icon exit'></span><br /> #{_('leave')}".html_safe, leave_admin_path, {:size => "300x140", :title => _("Leave Alchemy")}) %>
|
|
38
|
+
</div>
|
|
39
|
+
</div>
|
|
40
|
+
<div id="top_menu">
|
|
41
|
+
<div id="sub_navigation">
|
|
42
|
+
<%= admin_subnavigation %>
|
|
43
|
+
<div id="subnav_additions">
|
|
44
|
+
<%= yield(:subnav_additions) %>
|
|
45
|
+
</div>
|
|
46
|
+
</div>
|
|
47
|
+
<%= yield(:toolbar) %>
|
|
48
|
+
<%- if current_user -%>
|
|
49
|
+
<div id="user_info">
|
|
50
|
+
<%= _('Logged in as') %> <%= current_user.name %>
|
|
51
|
+
</div>
|
|
52
|
+
<%- end -%>
|
|
53
|
+
</div>
|
|
54
|
+
<%= render :partial => 'admin/partials/flash_notices' %>
|
|
55
|
+
<div id="main_content">
|
|
56
|
+
<%= yield %>
|
|
57
|
+
</div>
|
|
58
|
+
<%= yield(:javascripts) %>
|
|
59
|
+
</body>
|
|
60
60
|
</html>
|