alchemy_cms 2.5.0.rc3 → 2.5.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (51) hide show
  1. data/.travis.yml +1 -1
  2. data/README.md +22 -29
  3. data/alchemy_cms.gemspec +3 -2
  4. data/app/assets/javascripts/alchemy/alchemy.base.js +7 -0
  5. data/app/assets/javascripts/alchemy/alchemy.datepicker.js +3 -2
  6. data/app/assets/javascripts/alchemy/alchemy.image_cropper.js +5 -2
  7. data/app/assets/javascripts/alchemy/alchemy.js +8 -1
  8. data/app/assets/javascripts/alchemy/alchemy.menubar.js +4 -1
  9. data/app/assets/stylesheets/alchemy/archive.scss +1 -6
  10. data/app/assets/stylesheets/alchemy/base.scss +37 -17
  11. data/app/assets/stylesheets/alchemy/dashboard.scss +41 -24
  12. data/app/assets/stylesheets/alchemy/form_elements.scss +1 -1
  13. data/app/assets/stylesheets/alchemy/jquery-ui.scss +3 -2
  14. data/app/assets/stylesheets/alchemy/login.scss +1 -1
  15. data/app/assets/stylesheets/alchemy/menubar.css.scss +3 -1
  16. data/app/assets/stylesheets/alchemy/mixins.scss +9 -0
  17. data/app/assets/stylesheets/alchemy/notices.scss +1 -1
  18. data/app/assets/stylesheets/alchemy/sitemap.scss +1 -1
  19. data/app/controllers/alchemy/admin/dashboard_controller.rb +46 -3
  20. data/app/controllers/alchemy/admin/essence_pictures_controller.rb +3 -0
  21. data/app/controllers/alchemy/admin/pages_controller.rb +7 -7
  22. data/app/controllers/alchemy/attachments_controller.rb +1 -1
  23. data/app/controllers/alchemy/base_controller.rb +5 -1
  24. data/app/helpers/alchemy/admin/essences_helper.rb +21 -0
  25. data/app/models/alchemy/attachment.rb +3 -1
  26. data/app/models/alchemy/page.rb +11 -8
  27. data/app/views/alchemy/admin/dashboard/_locked_pages.html.erb +38 -0
  28. data/app/views/alchemy/admin/dashboard/_recent_pages.html.erb +22 -0
  29. data/app/views/alchemy/admin/dashboard/_sites.html.erb +13 -0
  30. data/app/views/alchemy/admin/dashboard/_users.html.erb +19 -0
  31. data/app/views/alchemy/admin/dashboard/index.html.erb +35 -101
  32. data/app/views/alchemy/admin/dashboard/info.html.erb +57 -0
  33. data/app/views/alchemy/admin/elements/create.js.erb +4 -1
  34. data/app/views/alchemy/admin/elements/update.js.erb +1 -0
  35. data/app/views/alchemy/admin/essence_pictures/crop.html.erb +38 -41
  36. data/app/views/alchemy/admin/essence_pictures/update.js.erb +2 -4
  37. data/app/views/alchemy/essences/_essence_file_view.html.erb +1 -2
  38. data/app/views/alchemy/essences/_essence_picture_editor.html.erb +1 -18
  39. data/app/views/alchemy/essences/_essence_picture_tools.html.erb +1 -1
  40. data/app/views/layouts/alchemy/admin.html.erb +1 -0
  41. data/config/authorization_rules.rb +1 -0
  42. data/config/locales/alchemy.de.yml +5 -1
  43. data/config/locales/alchemy.en.yml +1 -0
  44. data/config/routes.rb +5 -1
  45. data/lib/alchemy/errors.rb +7 -0
  46. data/lib/alchemy/version.rb +1 -1
  47. data/lib/alchemy_cms.rb +1 -0
  48. data/lib/tasks/ferret.rake +0 -3
  49. data/spec/models/attachment_spec.rb +27 -0
  50. data/spec/models/page_spec.rb +7 -0
  51. metadata +33 -7
@@ -0,0 +1,57 @@
1
+ <p class="center with_margin"><%= image_tag('alchemy/alchemy-logo.png') %></p>
2
+ <h2 class="center with_margin">
3
+ <%= _t("Version") %>: <%= @alchemy_version %>
4
+ </h2>
5
+ <p class="center with_margin" id="update_check">
6
+ <%= image_tag('alchemy/ajax_loader.gif', :id => 'load_info') %>
7
+ <span id="update_available">
8
+ <%= render_icon('warn') %>
9
+ <%= _t 'Update available' %>
10
+ </span>
11
+ <span id="up_to_date">
12
+ <%= render_icon('tick') %>
13
+ <%= _t 'Alchemy is up to date' %>
14
+ </span>
15
+ <span id="error">
16
+ <%= render_icon('error') %>
17
+ <%= _t 'Update status unavailable' %>
18
+ </span>
19
+ </p>
20
+ <div class="info with_margin">
21
+ <%= render_icon('info') %>
22
+ <p><%= _t('Alchemy is open software and itself uses open software and free resources:') %></p>
23
+ <ul>
24
+ <li>
25
+ <a href="http://rubyonrails.org" target="_blank">RubyOnRails</a>
26
+ </li>
27
+ <li>
28
+ <a href="http://jquery.com" target="_blank">jQuery Javascript Library</a>
29
+ </li>
30
+ <li>
31
+ <a href="http://jqueryui.com" target="_blank">jQuery UI Javascript GUI Library</a>
32
+ </li>
33
+ <li>
34
+ <a href="http://tinymce.moxiecode.com" target="_blank">TinyMCE - Javascript WYSIWYG Editor</a>
35
+ </li>
36
+ <li>
37
+ <a href="http://swfupload.org" target="_blank">SWFUpload</a>
38
+ </li>
39
+ <li>
40
+ <a href="http://p.yusukekamiyamane.com" target="_blank">Fugue Icons by Yusuke Kamiyamane</a>
41
+ </li>
42
+ </ul>
43
+ </div>
44
+ <script type="text/javascript">
45
+ $('#load_info').show();
46
+ $.get('/admin/dashboard/update_check', function(data, textStatus, jqXHR) {
47
+ if (data == 'true') {
48
+ $('#update_available').show();
49
+ } else {
50
+ $('#up_to_date').show();
51
+ }
52
+ }).fail(function(jqXHR, textStatus, errorThrown) {
53
+ $('#error').show();
54
+ }).always(function() {
55
+ $('#load_info').hide();
56
+ });
57
+ </script>
@@ -7,7 +7,10 @@ $('.element_editor[data-element-id="<%= @cutted_element_id %>"]').remove();
7
7
  <% end %>
8
8
 
9
9
  <% if @page.can_have_cells? %>
10
- Alchemy.selectOrCreateCellTab('<%= @cell_name -%>', '<%= @cell.nil? ? _t("other Elements") : @cell.name_for_label -%>');
10
+ if ($('#cells').length == 0) {
11
+ Alchemy.buildTabbedCells('<%= _t(:main_content) %>');
12
+ }
13
+ Alchemy.selectOrCreateCellTab('<%= @cell_name -%>', '<%= @cell.nil? ? _t(:main_content) : @cell.name_for_label -%>');
11
14
  <% end %>
12
15
 
13
16
  $element_area = $('#cell_<%= @cell_name -%>');
@@ -19,6 +19,7 @@ $('#element_<%= @element.id %>_errors').html('<%= @error_message %><ul><li><%= @
19
19
  $("#element_<%= @element.id %>_errors").show();
20
20
  $('div.content_editor').removeClass('validation_failed');
21
21
  $('<%= @element.contents_with_errors.map { |content| "#" + content_dom_id(content) }.join(", ") %>').addClass('validation_failed');
22
+ Alchemy.ElementEditorSelector.scrollToElement('#element_<%= @element.id %>');
22
23
  Alchemy.Buttons.enable($el);
23
24
 
24
25
  <% end %>
@@ -1,49 +1,46 @@
1
+ <div id="jscropper">
1
2
  <% if @no_image_notice %>
2
- <div class="with_padding">
3
- <div class="info">
4
- <%= render_icon('info') %>
3
+ <%= render_message do %>
5
4
  <%= @no_image_notice %>
6
- </div>
7
- </div>
5
+ <% end %>
8
6
  <% else %>
9
- <div id="overlay_toolbar">
10
- <%= form_for(@essence_picture, :url => alchemy.admin_essence_picture_path(@essence_picture, :options => @options), :id => 'image_cropper_form', :remote => true) do |f| %>
7
+ <%= render_message do %>
8
+ <%= _t('explain cropping') %>
9
+ <% end %>
10
+ <div class="thumbnail_background">
11
+ <span class="picture_content_spinner">
12
+ <%= image_tag("alchemy/image_loader.gif", :alt => '') %>
13
+ </span>
14
+ <%= image_tag(show_alchemy_picture_path(@essence_picture.picture, :size => '800x600', :format => :png),
15
+ :id => 'imageToCrop',
16
+ :onload => %(
17
+ Alchemy.fadeImage(this, '#jscropper .picture_content_spinner');
18
+ Alchemy.ImageCropper.init(
19
+ [#{@initial_box[:x1]}, #{@initial_box[:y1]}, #{@initial_box[:x2]}, #{@initial_box[:y2]}],
20
+ #{@size_x},
21
+ #{@size_y},
22
+ [#{@default_box[:x1]}, #{@default_box[:y1]}, #{@default_box[:x2]}, #{@default_box[:y2]}],
23
+ #{@ratio},
24
+ [#{@essence_picture.picture.image_file_width}, #{@essence_picture.picture.image_file_height}]
25
+ );
26
+ ),
27
+ :style => "display: none;"
28
+ ) %>
29
+ </div>
30
+ <%= form_for(
31
+ @essence_picture,
32
+ :url => alchemy.admin_essence_picture_path(@essence_picture, :options => @options),
33
+ :id => 'image_cropper_form',
34
+ :remote => true
35
+ ) do |f| %>
11
36
  <%= f.hidden_field :crop_from %>
12
37
  <%= f.hidden_field :crop_size %>
13
- <%= hidden_field_tag 'content_id', @content.id %>
14
- <%= f.button _t("save"), :class => 'button' %>
15
- <% end %>
16
- <div class="toolbar_spacer"></div>
17
- <div class="button_with_label">
18
- <%= link_to(render_icon('delete-small'), '#', {
38
+ <%= hidden_field_tag :content_id, @content.id %>
39
+ <%= link_to(render_icon('delete-small') + _t('Reset Imagemask'), '#', {
19
40
  :onclick => 'Alchemy.ImageCropper.reset()',
20
- :class => 'icon_button',
21
- :title => _t('Reset Imagemask')
41
+ :class => 'button with_icon'
22
42
  }) %>
23
- <label><%= _t("Reset Imagemask") %></label>
24
- </div>
25
- </div>
26
-
27
- <div id="crop_explain" class="tip">
28
- <%= _t('explain cropping') %>
29
- </div>
30
-
31
- <div id="jscropper">
32
- <%= image_tag(
33
- alchemy.zoom_picture_path(
34
- :id => @essence_picture.picture.id,
35
- :name => @essence_picture.picture.urlname,
36
- :format => @options[:format],
37
- :sh => @essence_picture.picture.security_token
38
- ),
39
- :id => 'imageToCrop',
40
- :onload => "Alchemy.ImageCropper.init(
41
- [#{@initial_box[:x1]}, #{@initial_box[:y1]}, #{@initial_box[:x2]}, #{@initial_box[:y2]}],
42
- #{@size_x},
43
- #{@size_y},
44
- [#{@default_box[:x1]}, #{@default_box[:y1]}, #{@default_box[:x2]}, #{@default_box[:y2]}],
45
- #{@ratio}
46
- );"
47
- ) %>
48
- </div>
43
+ <%= f.button _t("apply"), :class => 'button' %>
44
+ <% end %>
49
45
  <% end %>
46
+ </div>
@@ -1,8 +1,6 @@
1
1
  (function($) {
2
2
  Alchemy.ImageCropper.destroy();
3
3
  Alchemy.closeCurrentWindow();
4
- Alchemy.setElementDirty('#element_<%= @content.element.id -%>');
5
- <%- if @content.element.all_contents_by_type("Alchemy::EssencePicture").count > 1 -%>
6
- Alchemy.SortableContents('<%= form_authenticity_token -%>');
7
- <%- end -%>
4
+ Alchemy.setElementDirty('#element_<%= @content.element.id %>');
5
+ $('.thumbnail_background img', '#<%= content_dom_id(@content) %>').replaceWith('<%= essence_picture_thumbnail(@content, @options) %>');
8
6
  })(jQuery);
@@ -2,8 +2,7 @@
2
2
  h(content.essence.attachment.name),
3
3
  alchemy.download_attachment_path(
4
4
  :id => content.essence.attachment.id,
5
- :name => content.essence.attachment.urlname,
6
- :format => content.essence.attachment.suffix
5
+ :name => content.essence.attachment.urlname
7
6
  ),
8
7
  :class => "file_link #{content.essence.css_class.blank? ? "" : content.essence.css_class}",
9
8
  :title => "#{content.essence.title.blank? ? content.essence.attachment.filename : content.essence.title}"
@@ -38,24 +38,7 @@
38
38
  <div class="picture_image">
39
39
  <div class="thumbnail_background<%= ' missing' if content.ingredient.nil? %>">
40
40
  <%- if content.ingredient -%>
41
- <% image_options = {
42
- :size => content.ingredient.cropped_thumbnail_size(content.essence.render_size.blank? ? options[:image_size] : content.essence.render_size),
43
- :crop_from => content.essence.crop_from.blank? ? nil : content.essence.crop_from,
44
- :crop_size => content.essence.crop_size.blank? ? nil : content.essence.crop_size,
45
- :crop => content.essence.crop_size.blank? && content.essence.crop_from.blank? ? 'crop' : nil
46
- } %>
47
- <%= image_tag(
48
- alchemy.thumbnail_path({
49
- :id => content.ingredient.id,
50
- :name => content.ingredient.urlname,
51
- :sh => content.ingredient.security_token(image_options)
52
- }.merge(image_options)),
53
- :alt => content.ingredient.name,
54
- :class => 'img_paddingtop',
55
- :title => _t("image_name") + ": #{content.ingredient.name}",
56
- :onload => "Alchemy.fadeImage(this, '##{content_dom_id(content)} .picture_content_spinner');",
57
- :style => "display: none;"
58
- ) %>
41
+ <%= essence_picture_thumbnail(content, options) %>
59
42
  <%= hidden_field_tag content.form_field_name(:picture_id), content.ingredient.id %>
60
43
  <% end %>
61
44
  </div>
@@ -3,7 +3,7 @@
3
3
  render_icon('crop'),
4
4
  alchemy.crop_admin_essence_picture_path(content.essence, :options => options),
5
5
  {
6
- :size => "fullscreen",
6
+ :size => "816x754",
7
7
  :title => _t('Edit Picturemask')
8
8
  },
9
9
  {
@@ -4,6 +4,7 @@
4
4
  <meta charset="UTF-8">
5
5
  <title><%= render_alchemy_title %></title>
6
6
  <%= csrf_meta_tag %>
7
+ <meta name="robots" content="noindex">
7
8
  <%= stylesheet_link_tag('alchemy/admin', :media => 'screen') %>
8
9
  <%= stylesheet_link_tag('alchemy/print', :media => 'print') %>
9
10
  <%= yield :stylesheets %>
@@ -45,6 +45,7 @@ authorization do
45
45
  has_permission_on :alchemy_admin_trash, :to => [:index, :clear]
46
46
  has_permission_on :alchemy_admin_clipboard, :to => [:index, :insert, :remove, :clear]
47
47
  has_permission_on :alchemy_admin_tags, :to => [:autocomplete]
48
+ has_permission_on :alchemy_admin_dashboard, :to => [:info, :update_check]
48
49
  end
49
50
 
50
51
  role :editor do
@@ -197,6 +197,7 @@ de:
197
197
  "Add global page": "Neue globale Seite"
198
198
  "Adobe Website": "Adobe Webseite"
199
199
  "Alchemy is open software and itself uses open software and free resources:": "Alchemy ist offene Software und benutzt selbst offene Software und freie Ressourcen:"
200
+ "Alchemy is up to date": 'Alchemy ist aktuell'
200
201
  "Change password": "Passwort ändern"
201
202
  "Choose page": "Seite wählen"
202
203
  "Cleared trash": "Der Papierkorb wurde geleert"
@@ -408,7 +409,7 @@ de:
408
409
  element_of_type: "Element"
409
410
  element_saved: "Element wurde gespeichert."
410
411
  enter_external_link: "Geben Sie hier die Adresse der Seite ein zu der Sie einen Link setzen wollen."
411
- explain cropping: "Sie können den Rahmen verschieben und in der Größe verändern um den Bildausschnitt festzulegen. Wenn Sie zufrieden sind, dann klicken Sie bitte auf speichern."
412
+ 'explain cropping': "Sie können den Rahmen verschieben und in der Größe verändern um den Bildausschnitt festzulegen. Wenn Sie zufrieden sind, dann klicken Sie bitte auf speichern."
412
413
  explain_publishing: "Die gecachte Version vom Server löschen und die aktuellen Änderungen veröffentlichen"
413
414
  explain_sitemap_dragndrop_sorting: "Tip: Halten Sie zum Sortieren der Seiten das Seitensymbol mit der Maus fest und bewegen Sie sie an ihre neue Position."
414
415
  explain_unlocking: "Die Seite verlassen und für andere Benutzer zum Bearbeiten freigeben."
@@ -456,6 +457,7 @@ de:
456
457
  mail_to: "Empfängeradresse"
457
458
  main_content: "Hauptinhalt"
458
459
  male: "Herr"
460
+ me: 'Ich'
459
461
  medium_thumbnails: "mittlere Miniaturbilder"
460
462
  meta_data: "Meta Daten"
461
463
  meta_description: "Meta Beschreibung"
@@ -618,6 +620,8 @@ de:
618
620
  "Now drop the files": "Lassen Sie die Dateien nun los"
619
621
  "Queued x files": "x Dateien in der Warteschlange."
620
622
  complete: 'Abgeschlossen'
623
+ "Update available": 'Es ist ein Update verfügbar'
624
+ "Update status unavailable": 'Update Status konnte nicht ermittelt werden'
621
625
  "Uploading": "Hochladen"
622
626
  "Uploaded x files": "x Dateien hochgeladen."
623
627
 
@@ -249,6 +249,7 @@ en:
249
249
  element_of_type: "Element"
250
250
  element_saved: "Saved element."
251
251
  enter_external_link: "Please enter the URL you want to link with"
252
+ 'explain cropping': "Move the frame and change its size to adjust the image section. Click on apply when you are satisfied."
252
253
  explain_publishing: "Publish the page and remove the cached version from the server."
253
254
  explain_sitemap_dragndrop_sorting: "Tip: Drag the pages at the icon in order to sort them."
254
255
  explain_unlocking: "Leave page and unlock it for other users."
@@ -8,6 +8,10 @@ Alchemy::Engine.routes.draw do
8
8
 
9
9
  get '/admin/dashboard' => 'admin/dashboard#index',
10
10
  :as => :admin_dashboard
11
+ get '/admin/dashboard/info' => 'admin/dashboard#info',
12
+ :as => :dashboard_info
13
+ get '/admin/dashboard/update_check' => 'admin/dashboard#update_check',
14
+ :as => :update_check
11
15
 
12
16
  devise_scope :user do
13
17
  get '/admin/login' => 'user_sessions#new', :as => :login
@@ -34,7 +38,7 @@ Alchemy::Engine.routes.draw do
34
38
  get '/admin/signup' => 'users#new', :as => :signup
35
39
  post '/admin/signup' => 'users#create', :as => :signup
36
40
 
37
- get '/attachment/:id/download(/:name)(.:format)' => 'attachments#download',
41
+ get '/attachment/:id/download(/:name)' => 'attachments#download',
38
42
  :as => :download_attachment
39
43
  get '/attachment/:id/show' => 'attachments#show',
40
44
  :as => :show_attachment
@@ -42,4 +42,11 @@ module Alchemy
42
42
 
43
43
  class TinymceError < StandardError; end
44
44
 
45
+ class UpdateServiceUnavailable < StandardError
46
+ # Raised it no succesful connection to GitHub was possible
47
+ def message
48
+ "The update service is temporarily unavailable!"
49
+ end
50
+ end
51
+
45
52
  end
@@ -1,6 +1,6 @@
1
1
  module Alchemy
2
2
 
3
- VERSION = "2.5.0.rc3"
3
+ VERSION = "2.5.0"
4
4
 
5
5
  def self.version
6
6
  VERSION
@@ -10,6 +10,7 @@ if Rails::VERSION::MAJOR == 3 && Rails::VERSION::MINOR == 2
10
10
  require 'dragonfly'
11
11
  require 'dynamic_form'
12
12
  require 'jquery-rails'
13
+ require 'jquery-ui-rails'
13
14
  require 'rails3-jquery-autocomplete'
14
15
  require 'kaminari'
15
16
  require 'userstamp'
@@ -2,11 +2,8 @@ namespace :ferret do
2
2
 
3
3
  desc "Updates the Ferret index."
4
4
  task :rebuild_index => :environment do
5
- puts "Rebuilding Ferret index for EssenceText"
6
5
  Alchemy::EssenceText.where(:do_not_index => false).rebuild_index
7
- puts "Rebuilding Ferret index for EssenceRichtext"
8
6
  Alchemy::EssenceRichtext.where(:do_not_index => false).rebuild_index
9
- puts "Completed Ferret index rebuild"
10
7
  end
11
8
 
12
9
  end
@@ -0,0 +1,27 @@
1
+ require 'spec_helper'
2
+
3
+ module Alchemy
4
+ describe Attachment do
5
+
6
+ describe '#urlname' do
7
+
8
+ context "with url characters in the filename" do
9
+ subject { Attachment.new(:filename => 'f#%&cking cute kitten pic.png') }
10
+
11
+ it "should escape as uri" do
12
+ subject.urlname.should == 'f___cking_cute_kitten_pic.png'
13
+ end
14
+ end
15
+
16
+ context "with lot of dots in the name" do
17
+ subject { Attachment.new(:filename => 'cute.kitten.pic.png') }
18
+
19
+ it "should convert dots in the name part into dashes" do
20
+ subject.urlname.should == 'cute-kitten-pic.png'
21
+ end
22
+ end
23
+
24
+ end
25
+
26
+ end
27
+ end
@@ -736,6 +736,13 @@ module Alchemy
736
736
  subject.elements.should be_empty
737
737
  end
738
738
  end
739
+
740
+ context "with different page name given" do
741
+ subject { Page.copy(page, {:name => 'Different name'}) }
742
+ it "should take this name" do
743
+ subject.name.should == 'Different name'
744
+ end
745
+ end
739
746
  end
740
747
 
741
748
  end
metadata CHANGED
@@ -1,8 +1,8 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: alchemy_cms
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.5.0.rc3
5
- prerelease: 6
4
+ version: 2.5.0
5
+ prerelease:
6
6
  platform: ruby
7
7
  authors:
8
8
  - Thomas von Deyen
@@ -13,7 +13,7 @@ authors:
13
13
  autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
- date: 2013-01-30 00:00:00.000000000 Z
16
+ date: 2013-02-04 00:00:00.000000000 Z
17
17
  dependencies:
18
18
  - !ruby/object:Gem::Dependency
19
19
  name: rails
@@ -223,6 +223,22 @@ dependencies:
223
223
  - - ~>
224
224
  - !ruby/object:Gem::Version
225
225
  version: 2.1.3
226
+ - !ruby/object:Gem::Dependency
227
+ name: jquery-ui-rails
228
+ requirement: !ruby/object:Gem::Requirement
229
+ none: false
230
+ requirements:
231
+ - - ~>
232
+ - !ruby/object:Gem::Version
233
+ version: 3.0.1
234
+ type: :runtime
235
+ prerelease: false
236
+ version_requirements: !ruby/object:Gem::Requirement
237
+ none: false
238
+ requirements:
239
+ - - ~>
240
+ - !ruby/object:Gem::Version
241
+ version: 3.0.1
226
242
  - !ruby/object:Gem::Dependency
227
243
  name: attachment_magic
228
244
  requirement: !ruby/object:Gem::Requirement
@@ -431,7 +447,7 @@ dependencies:
431
447
  - - ! '>='
432
448
  - !ruby/object:Gem::Version
433
449
  version: '0'
434
- description: Alchemy is a Rails 3 CMS with a flexible content storing architecture.
450
+ description: Alchemy is a powerful, userfriendly and flexible Rails 3 CMS.
435
451
  email:
436
452
  - alchemy@magiclabs.de
437
453
  executables:
@@ -610,7 +626,12 @@ files:
610
626
  - app/views/alchemy/admin/contents/destroy.js.coffee
611
627
  - app/views/alchemy/admin/contents/new.html.erb
612
628
  - app/views/alchemy/admin/contents/order.js.erb
629
+ - app/views/alchemy/admin/dashboard/_locked_pages.html.erb
630
+ - app/views/alchemy/admin/dashboard/_recent_pages.html.erb
631
+ - app/views/alchemy/admin/dashboard/_sites.html.erb
632
+ - app/views/alchemy/admin/dashboard/_users.html.erb
613
633
  - app/views/alchemy/admin/dashboard/index.html.erb
634
+ - app/views/alchemy/admin/dashboard/info.html.erb
614
635
  - app/views/alchemy/admin/elements/_add_picture.html.erb
615
636
  - app/views/alchemy/admin/elements/_element.html.erb
616
637
  - app/views/alchemy/admin/elements/_element_foot.html.erb
@@ -953,6 +974,7 @@ files:
953
974
  - spec/libraries/essence_spec.rb
954
975
  - spec/libraries/resource_spec.rb
955
976
  - spec/libraries/resources_helper_spec.rb
977
+ - spec/models/attachment_spec.rb
956
978
  - spec/models/cell_spec.rb
957
979
  - spec/models/clipboard_spec.rb
958
980
  - spec/models/content_spec.rb
@@ -1101,16 +1123,19 @@ required_ruby_version: !ruby/object:Gem::Requirement
1101
1123
  required_rubygems_version: !ruby/object:Gem::Requirement
1102
1124
  none: false
1103
1125
  requirements:
1104
- - - ! '>'
1126
+ - - ! '>='
1105
1127
  - !ruby/object:Gem::Version
1106
- version: 1.3.1
1128
+ version: '0'
1129
+ segments:
1130
+ - 0
1131
+ hash: -4006673498087041620
1107
1132
  requirements:
1108
1133
  - ImageMagick (libmagick), v6.6 or greater.
1109
1134
  rubyforge_project:
1110
1135
  rubygems_version: 1.8.24
1111
1136
  signing_key:
1112
1137
  specification_version: 3
1113
- summary: An extremly flexbile CMS for Rails 3.2
1138
+ summary: A powerful, userfriendly and flexible CMS for Rails 3
1114
1139
  test_files:
1115
1140
  - spec/alchemy_spec.rb
1116
1141
  - spec/config_spec.rb
@@ -1213,6 +1238,7 @@ test_files:
1213
1238
  - spec/libraries/essence_spec.rb
1214
1239
  - spec/libraries/resource_spec.rb
1215
1240
  - spec/libraries/resources_helper_spec.rb
1241
+ - spec/models/attachment_spec.rb
1216
1242
  - spec/models/cell_spec.rb
1217
1243
  - spec/models/clipboard_spec.rb
1218
1244
  - spec/models/content_spec.rb