alchemy_cms 2.3.2 → 2.4.beta2

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.
Files changed (164) hide show
  1. data/.gitignore +1 -2
  2. data/.travis.yml +1 -5
  3. data/Gemfile +4 -4
  4. data/README.md +22 -15
  5. data/alchemy_cms.gemspec +38 -38
  6. data/app/assets/javascripts/alchemy/alchemy.base.js +2 -2
  7. data/app/assets/javascripts/alchemy/alchemy.buttons.js.coffee +31 -0
  8. data/app/assets/javascripts/alchemy/alchemy.dragndrop.js +1 -1
  9. data/app/assets/javascripts/alchemy/alchemy.elements_window.js +24 -15
  10. data/app/assets/javascripts/alchemy/alchemy.gui.js.coffee +9 -3
  11. data/app/assets/javascripts/alchemy/alchemy.jquery_loader.js +2 -2
  12. data/app/assets/javascripts/alchemy/alchemy.js +1 -0
  13. data/app/assets/javascripts/alchemy/alchemy.menubar.js +4 -12
  14. data/app/assets/javascripts/alchemy/alchemy.onload.js.coffee +32 -0
  15. data/app/assets/javascripts/alchemy/alchemy.windows.js +4 -4
  16. data/app/assets/stylesheets/alchemy/_defaults.scss +0 -1
  17. data/app/assets/stylesheets/alchemy/alchemy.css +2 -1
  18. data/app/assets/stylesheets/alchemy/base.css.scss +2 -54
  19. data/app/assets/stylesheets/alchemy/elements.css.scss +8 -5
  20. data/app/assets/stylesheets/alchemy/errors.css.scss +51 -0
  21. data/app/assets/stylesheets/alchemy/flash.css.scss +0 -2
  22. data/app/assets/stylesheets/alchemy/form_elements.css.scss +31 -75
  23. data/app/assets/stylesheets/alchemy/icons.css.scss +5 -5
  24. data/app/assets/stylesheets/alchemy/menubar.css.scss +0 -2
  25. data/app/assets/stylesheets/alchemy/sitemap.css.scss +0 -1
  26. data/app/assets/stylesheets/alchemy/tables.css.scss +3 -1
  27. data/app/controllers/alchemy/admin/base_controller.rb +19 -12
  28. data/app/controllers/alchemy/admin/elements_controller.rb +52 -24
  29. data/app/controllers/alchemy/admin/pages_controller.rb +11 -5
  30. data/app/controllers/alchemy/admin/resources_controller.rb +3 -4
  31. data/app/controllers/alchemy/admin/users_controller.rb +1 -0
  32. data/app/controllers/alchemy/base_controller.rb +34 -8
  33. data/app/controllers/alchemy/pictures_controller.rb +16 -1
  34. data/app/controllers/alchemy/user_sessions_controller.rb +6 -1
  35. data/app/helpers/alchemy/base_helper.rb +14 -0
  36. data/app/helpers/alchemy/elements_helper.rb +10 -5
  37. data/app/helpers/alchemy/pages_helper.rb +1 -2
  38. data/app/helpers/alchemy/url_helper.rb +43 -24
  39. data/app/models/alchemy/element.rb +23 -16
  40. data/app/models/alchemy/page.rb +25 -14
  41. data/app/models/alchemy/picture.rb +24 -0
  42. data/app/views/alchemy/admin/contents/create.js.erb +1 -1
  43. data/app/views/alchemy/admin/elements/_new_element_form.html.erb +1 -1
  44. data/app/views/alchemy/admin/elements/create.js.erb +11 -3
  45. data/app/views/alchemy/admin/elements/fold.js.erb +1 -1
  46. data/app/views/alchemy/admin/elements/new.html.erb +1 -1
  47. data/app/views/alchemy/admin/elements/update.js.erb +1 -1
  48. data/app/views/alchemy/admin/essence_pictures/crop.html.erb +1 -1
  49. data/app/views/alchemy/admin/languages/_form.html.erb +1 -1
  50. data/app/views/alchemy/admin/pages/_new_page_form.html.erb +1 -1
  51. data/app/views/alchemy/admin/pages/_page.html.erb +1 -1
  52. data/app/views/alchemy/admin/pages/configure.html.erb +10 -6
  53. data/app/views/alchemy/admin/pages/configure_external.html.erb +1 -1
  54. data/app/views/alchemy/admin/pages/edit.html.erb +1 -2
  55. data/app/views/alchemy/admin/pages/new.html.erb +2 -2
  56. data/app/views/alchemy/admin/pages/update.js.erb +10 -2
  57. data/app/views/alchemy/admin/partials/_sub_navigation_tab.html.erb +5 -5
  58. data/app/views/alchemy/admin/pictures/_filter_bar.html.erb +2 -1
  59. data/app/views/alchemy/admin/pictures/_picture.html.erb +2 -2
  60. data/app/views/alchemy/admin/pictures/_picture_to_assign.html.erb +2 -1
  61. data/app/views/alchemy/admin/pictures/show_in_window.html.erb +3 -2
  62. data/app/views/alchemy/admin/resources/_form.html.erb +1 -1
  63. data/app/views/alchemy/admin/users/_table.html.erb +4 -4
  64. data/app/views/alchemy/admin/users/edit.html.erb +1 -1
  65. data/app/views/alchemy/admin/users/new.html.erb +1 -1
  66. data/app/views/alchemy/base/error_notice.js.erb +1 -1
  67. data/app/views/alchemy/base/remote_errors.js.erb +2 -3
  68. data/app/views/alchemy/essences/_essence_picture_editor.html.erb +10 -7
  69. data/app/views/alchemy/essences/_essence_picture_view.html.erb +24 -21
  70. data/app/views/layouts/alchemy/admin.html.erb +9 -31
  71. data/bin/alchemy +20 -24
  72. data/config/alchemy/config.yml +6 -0
  73. data/config/alchemy/page_layouts.yml +2 -0
  74. data/config/authorization_rules.rb +1 -1
  75. data/config/locales/alchemy.de.yml +3 -0
  76. data/config/locales/alchemy.en.yml +4 -1
  77. data/db/migrate/20121026100815_alchemy_two_point_three.rb +312 -0
  78. data/lib/alchemy/mount_point.rb +9 -3
  79. data/lib/alchemy/page_layout.rb +89 -73
  80. data/lib/alchemy/version.rb +1 -1
  81. data/lib/rails/generators/alchemy/deploy_script/deploy_script_generator.rb +45 -12
  82. data/lib/rails/generators/alchemy/deploy_script/templates/deploy.rb.tt +3 -1
  83. data/lib/rails/generators/alchemy/essence/essence_generator.rb +51 -0
  84. data/lib/rails/generators/alchemy/essence/templates/editor.html.erb +18 -0
  85. data/lib/rails/generators/alchemy/essence/templates/view.html.erb +2 -0
  86. data/lib/rails/templates/alchemy.rb +1 -1
  87. data/lib/tasks/install.rake +57 -2
  88. data/spec/controllers/admin/elements_controller_spec.rb +170 -22
  89. data/spec/controllers/admin/trash_controller_spec.rb +1 -1
  90. data/spec/controllers/admin/users_controller_spec.rb +36 -0
  91. data/spec/controllers/base_controller_spec.rb +12 -1
  92. data/spec/controllers/elements_controller_spec.rb +17 -13
  93. data/spec/controllers/pictures_controller_spec.rb +4 -4
  94. data/spec/dummy/config/application.rb +1 -1
  95. data/spec/dummy/db/migrate/20121026100815_alchemy_two_point_three.rb +312 -0
  96. data/spec/dummy/db/migrate/20121026104128_create_events.rb +19 -0
  97. data/spec/dummy/db/schema.rb +1 -1
  98. data/spec/factories.rb +0 -1
  99. data/spec/helpers/base_helper_spec.rb +48 -0
  100. data/spec/helpers/elements_helper_spec.rb +14 -3
  101. data/spec/helpers/url_helper_spec.rb +8 -3
  102. data/spec/integration/picture_security_spec.rb +35 -0
  103. data/spec/integration/translation_integration_spec.rb +6 -5
  104. data/spec/models/element_spec.rb +5 -5
  105. data/spec/models/page_layout_spec.rb +10 -16
  106. data/spec/models/page_spec.rb +25 -2
  107. data/spec/models/picture_spec.rb +24 -2
  108. data/spec/routing_spec.rb +115 -115
  109. data/spec/support/alchemy/specs_helpers.rb +4 -4
  110. data/{app/assets/images/alchemy → vendor/assets/images}/Jcrop.gif +0 -0
  111. data/vendor/assets/javascripts/jquery_plugins/jquery.Jcrop.min.js +19 -243
  112. data/vendor/assets/javascripts/jquery_plugins/jquery.selectboxit.min.js +1 -0
  113. data/vendor/assets/javascripts/jquery_plugins/jquery.ui.tabspaging.js +6 -6
  114. data/vendor/assets/stylesheets/jquery.Jcrop.min.css +28 -0
  115. metadata +48 -82
  116. data/app/assets/javascripts/alchemy/alchemy.buttons.js +0 -50
  117. data/app/assets/stylesheets/alchemy/jquery.Jcrop.css.scss +0 -54
  118. data/app/helpers/alchemy/pictures_helper.rb +0 -19
  119. data/db/migrate/20100607143125_create_pages.rb +0 -34
  120. data/db/migrate/20100607144254_create_elements.rb +0 -20
  121. data/db/migrate/20100607145256_create_contents.rb +0 -18
  122. data/db/migrate/20100607145719_create_users.rb +0 -32
  123. data/db/migrate/20100607150611_create_pictures.rb +0 -16
  124. data/db/migrate/20100607150812_create_attachments.rb +0 -16
  125. data/db/migrate/20100607153647_create_folded_pages.rb +0 -13
  126. data/db/migrate/20100607161345_create_essence_texts.rb +0 -19
  127. data/db/migrate/20100607162339_create_elements_pages.rb +0 -12
  128. data/db/migrate/20100607193638_create_essence_pictures.rb +0 -23
  129. data/db/migrate/20100607193646_create_essence_richtexts.rb +0 -16
  130. data/db/migrate/20100607193653_create_essence_htmls.rb +0 -13
  131. data/db/migrate/20100609111653_create_essence_dates.rb +0 -13
  132. data/db/migrate/20100609111809_create_essence_files.rb +0 -15
  133. data/db/migrate/20100609111821_create_essence_flashes.rb +0 -16
  134. data/db/migrate/20100609111837_create_essence_videos.rb +0 -18
  135. data/db/migrate/20100616150753_create_essence_audios.rb +0 -17
  136. data/db/migrate/20100812085225_add_crop_from_and_crop_size_to_essence_pictures.rb +0 -11
  137. data/db/migrate/20100909140701_change_essence_htmls_source_column_type.rb +0 -9
  138. data/db/migrate/20101109150312_alter_pages_visible_column_default.rb +0 -9
  139. data/db/migrate/20101109151812_create_languages.rb +0 -19
  140. data/db/migrate/20101216151419_add_language_id_to_pages.rb +0 -27
  141. data/db/migrate/20101216155216_add_index_to_languages.rb +0 -9
  142. data/db/migrate/20101216173323_add_default_to_languages.rb +0 -9
  143. data/db/migrate/20101218130049_add_urlname_index_to_pages.rb +0 -9
  144. data/db/migrate/20110115123343_remove_css_class_default_from_essence_pictures.rb +0 -11
  145. data/db/migrate/20110224105120_change_pages_visible_default.rb +0 -11
  146. data/db/migrate/20110228182659_remove_default_page_layout_from_pages.rb +0 -11
  147. data/db/migrate/20110414163140_remove_display_name_from_elements.rb +0 -11
  148. data/db/migrate/20110511100516_rename_essence_texts_title_to_link_title.rb +0 -9
  149. data/db/migrate/20110529130429_create_cells.rb +0 -14
  150. data/db/migrate/20110529130500_add_cell_id_to_elements.rb +0 -11
  151. data/db/migrate/20110530102804_change_pages_page_layout_column.rb +0 -11
  152. data/db/migrate/20110707190728_add_render_size_to_essence_pictures.rb +0 -9
  153. data/db/migrate/20110711142057_change_open_link_in_new_window_to_link_target.rb +0 -19
  154. data/db/migrate/20110919110451_add_default_role_to_users.rb +0 -9
  155. data/db/migrate/20111116125112_namespace_alchemy_models.rb +0 -23
  156. data/db/migrate/20120216135355_add_country_code_to_languages.rb +0 -9
  157. data/db/migrate/20120608085509_create_alchemy_essence_selects.rb +0 -11
  158. data/db/migrate/20120611221734_create_alchemy_essence_booleans.rb +0 -11
  159. data/db/migrate/20120704181529_add_upload_hash_to_alchemy_picture.rb +0 -5
  160. data/db/migrate/20120705214247_acts_as_taggable_on_migration.rb +0 -28
  161. data/db/migrate/20120728185830_add_cached_tag_list_to_alchemy_pictures.rb +0 -5
  162. data/db/migrate/20120831135441_set_alchemy_languages_country_code_default_to_empty_string.rb +0 -9
  163. data/spec/helpers/pictures_helper_spec.rb +0 -14
  164. data/vendor/assets/javascripts/jquery_plugins/jquery.selectBoxIt.js +0 -1909
data/.gitignore CHANGED
@@ -18,5 +18,4 @@ spec/dummy/uploads/
18
18
  spec/dummy/db/test.sqlite3-journal
19
19
  spec/dummy/db/seeds.rb
20
20
  .rvmrc
21
- spec/dummy/config/locales/**/*
22
- /coverage/
21
+ spec/dummy/config/locales/**/*
@@ -1,11 +1,10 @@
1
1
  language: ruby
2
2
  rvm:
3
- - ree
4
3
  - 1.9.2
5
4
  - 1.9.3
6
5
  branches:
7
6
  only:
8
- - 2.3-stable
7
+ - master
9
8
  before_script:
10
9
  - "phantomjs -v"
11
10
  - "sh -c 'cd spec/dummy && RAILS_ENV=test bundle exec rake db:create db:schema:load --trace'"
@@ -13,6 +12,3 @@ script: "bundle exec rspec spec"
13
12
  env:
14
13
  - DB=mysql
15
14
  - DB=postgresql
16
- matrix:
17
- allow_failures:
18
- - rvm: ree
data/Gemfile CHANGED
@@ -10,7 +10,7 @@ group :test do
10
10
  gem 'sqlite3' if ENV['DB'].nil? || ENV['DB'] == 'sqlite'
11
11
  gem 'mysql2' if ENV['DB'] == 'mysql'
12
12
  gem 'pg' if ENV['DB'] == 'postgresql'
13
- gem 'poltergeist'
13
+ gem 'poltergeist', '0.7.0'
14
14
  unless ENV['CI']
15
15
  gem 'launchy'
16
16
  end
@@ -24,9 +24,9 @@ end
24
24
 
25
25
  group :development do
26
26
  unless ENV['CI']
27
- #gem 'localeapp'
28
27
  gem 'guard-spork'
29
- gem 'debugger', :platform => :ruby_19
30
- gem 'ruby-debug', :platform => :ruby_18
28
+ gem 'debugger'
29
+ gem 'quiet_assets' # Mute assets loggin
30
+ gem 'thin' # Get rid off 'Could not determine content-length of response body' Warning. Start with 'rails s thin'
31
31
  end
32
32
  end
data/README.md CHANGED
@@ -1,14 +1,15 @@
1
1
  Alchemy CMS
2
2
  ===========
3
3
 
4
- [![Build Status](https://secure.travis-ci.org/magiclabs/alchemy_cms.png?branch=2.3-stable)](http://travis-ci.org/magiclabs/alchemy_cms)
4
+ [![Build Status](https://secure.travis-ci.org/magiclabs/alchemy_cms.png?branch=master)](http://travis-ci.org/magiclabs/alchemy_cms)
5
5
  [![Maintenance Status](http://stillmaintained.com/magiclabs/alchemy_cms.png)](http://stillmaintained.com/magiclabs/alchemy_cms)
6
6
  [![Code Climate](https://codeclimate.com/badge.png)](https://codeclimate.com/github/magiclabs/alchemy_cms)
7
- [![Dependency Status](https://gemnasium.com/magiclabs/alchemy_cms.png)](https://gemnasium.com/magiclabs/alchemy_cms)
8
7
 
9
8
  About
10
9
  -----
11
10
 
11
+ **This branch is a beta development branch. For productive environments use the current rubygems version, or the [latest stable branch (2.3-stable)](https://github.com/magiclabs/alchemy_cms/tree/2.3-stable).**
12
+
12
13
  Alchemy is a Rails 3 CMS with a flexible content storing architecture.
13
14
 
14
15
  Read more on the [website](http://alchemy-cms.com) and in the [guidelines](http://guides.alchemy-cms.com).
@@ -37,24 +38,25 @@ Rails Version
37
38
 
38
39
  This version of Alchemy runs with Rails 3.2.8+.
39
40
 
40
- If you are looking for a Rails 3.1 compatible version check the 2.1-stable branch.
41
+ If you are looking for a Rails 3.1 compatible version check the [2.1-stable branch](https://github.com/magiclabs/alchemy_cms/tree/2.1-stable).
41
42
 
42
- If you are looking for a Rails 3.0 compatible version check the 2.0-stable branch.
43
+ If you are looking for a Rails 3.0 compatible version check the [2.0-stable branch](https://github.com/magiclabs/alchemy_cms/tree/2.0-stable).
43
44
 
44
- If you are looking for a Rails 2.3 compatible version check the 1.6-stable branch.
45
+ If you are looking for a Rails 2.3 compatible version check the [1.6-stable branch](https://github.com/magiclabs/alchemy_cms/tree/1.6-stable).
45
46
 
46
47
  Ruby Version
47
48
  ------------
48
49
 
49
- Alchemy runs under Ruby 1.8.7, Ruby 1.9.2, Ruby 1.9.3 and REE (Ruby Enterprise Edition).
50
- We strongly recommend Ruby 1.9.3 for best performance and maximum security.
50
+ Alchemy runs with Ruby 1.9.2 and Ruby 1.9.3.
51
+
52
+ For a Ruby 1.8.7 compatible version use the [2.3-stable branch](https://github.com/magiclabs/alchemy_cms/tree/2.3-stable).
51
53
 
52
54
  Installation
53
55
  ------------
54
56
 
55
57
  Use the installer (recommended):
56
58
 
57
- gem install alchemy_cms
59
+ gem install alchemy_cms --pre
58
60
  alchemy new my_magicpage
59
61
 
60
62
  Start the local server:
@@ -66,9 +68,9 @@ Then just switch to your browser and open `http://localhost:3000`
66
68
  Upgrading
67
69
  ------------
68
70
 
69
- Projects running with Alchemy CMS version < 2.2 needs to be upgraded.
71
+ After updating Alchemy you should run the upgrader.
70
72
 
71
- Use the following Upgrade-Task:
73
+ Run in terminal:
72
74
 
73
75
  rake alchemy:upgrade
74
76
 
@@ -78,14 +80,18 @@ Add to existing Rails project
78
80
 
79
81
  In your Gemfile:
80
82
 
81
- gem 'alchemy_cms', :github => 'magiclabs/alchemy_cms', :branch => '2.3-stable'
83
+ gem 'alchemy_cms', :github => 'magiclabs/alchemy_cms'
82
84
 
83
85
  Run in terminal:
84
86
 
85
- bundle install
86
- rake alchemy:install:migrations
87
- rake db:migrate
88
- rake alchemy:db:seed
87
+ bundle update
88
+ rake alchemy:install
89
+
90
+ Note: If you did not mounted Alchemy on the root route `'/'`, then you have to add Alchemy's view helpers manually to your app.
91
+
92
+ Just paste this in your `app/controllers/application_controller.rb`
93
+
94
+ `helper Alchemy::PagesHelper`
89
95
 
90
96
  Tipps
91
97
  -----
@@ -112,6 +118,7 @@ Resources
112
118
  * Issue-Tracker: <http://issues.alchemy-cms.com>
113
119
  * Sourcecode: <http://source.alchemy-cms.com>
114
120
  * User Group: <http://groups.google.com/group/alchemy-cms>
121
+ * Changelog: <http://revision.io/alchemy_cms>
115
122
 
116
123
  Authors
117
124
  ---------
@@ -3,46 +3,46 @@ $:.push File.expand_path("../lib", __FILE__)
3
3
  require "alchemy/version"
4
4
 
5
5
  Gem::Specification.new do |s|
6
- s.name = "alchemy_cms"
7
- s.version = Alchemy::VERSION
8
- s.platform = Gem::Platform::RUBY
9
- s.authors = ["Thomas von Deyen", "Robin Böning", "Marc Schettke", "Carsten Fregin"]
10
- s.email = ["alchemy@magiclabs.de"]
11
- s.homepage = "http://alchemy-cms.com"
12
- s.summary = %q{An extremly flexbile CMS for Rails 3.2}
13
- s.description = %q{Alchemy is a Rails 3 CMS with a flexible content storing architecture.}
14
- s.requirements << 'ImageMagick (libmagick), v6.6 or greater.'
15
- s.required_ruby_version = '>= 1.8.7'
16
- s.license = 'BSD New'
6
+ s.name = "alchemy_cms"
7
+ s.version = Alchemy::VERSION
8
+ s.platform = Gem::Platform::RUBY
9
+ s.authors = ["Thomas von Deyen", "Robin Boening", "Marc Schettke", "Carsten Fregin"]
10
+ s.email = ["alchemy@magiclabs.de"]
11
+ s.homepage = "http://alchemy-cms.com"
12
+ s.summary = %q{An extremly flexbile CMS for Rails 3.2}
13
+ s.description = %q{Alchemy is a Rails 3 CMS with a flexible content storing architecture.}
14
+ s.requirements << 'ImageMagick (libmagick), v6.6 or greater.'
15
+ s.required_ruby_version = '~> 1.9.2'
16
+ s.license = 'BSD New'
17
17
 
18
- s.files = `git ls-files`.split("\n")
19
- s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
20
- s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
21
- s.require_paths = ["lib"]
18
+ s.files = `git ls-files`.split("\n")
19
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
20
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
21
+ s.require_paths = ["lib"]
22
22
 
23
- s.add_runtime_dependency(%q<rails>, ["~> 3.2.11"])
24
- s.add_runtime_dependency(%q<authlogic>)
25
- s.add_runtime_dependency(%q<awesome_nested_set>, ["~> 2.0"])
26
- s.add_runtime_dependency(%q<acts-as-taggable-on>, ["~> 2.1"])
27
- s.add_runtime_dependency(%q<declarative_authorization>, ["~> 0.5.4"])
28
- s.add_runtime_dependency(%q<tvdeyen-fleximage>, ["~> 1.2.0"])
29
- s.add_runtime_dependency(%q<kaminari>, ["~> 0.13.0"])
30
- s.add_runtime_dependency(%q<acts_as_ferret>, ["~> 0.5"])
31
- s.add_runtime_dependency(%q<acts_as_list>, ["~> 0.1"])
32
- s.add_runtime_dependency(%q<magiclabs-userstamp>, ["~> 2.0.2"])
33
- s.add_runtime_dependency(%q<dynamic_form>, ["~> 1.1"])
34
- s.add_runtime_dependency(%q<jquery-rails>, ["~> 2.0.0"])
35
- s.add_runtime_dependency(%q<attachment_magic>, ["~> 0.2.1"])
36
- s.add_runtime_dependency(%q<sass-rails>, ['~> 3.2.3'])
37
- s.add_runtime_dependency(%q<coffee-rails>, ['~> 3.2.1'])
38
- s.add_runtime_dependency(%q<compass-rails>, ['~> 1.0.3'])
39
- s.add_runtime_dependency(%q<sassy-buttons>, ['~> 0.1.3'])
23
+ s.add_runtime_dependency %q<rails>, ["~> 3.2.8"]
24
+ s.add_runtime_dependency %q<authlogic>, ["~> 3.1.3"]
25
+ s.add_runtime_dependency %q<awesome_nested_set>, ["~> 2.0"]
26
+ s.add_runtime_dependency %q<acts-as-taggable-on>, ["~> 2.1"]
27
+ s.add_runtime_dependency %q<declarative_authorization>, ["= 0.5.5"]
28
+ s.add_runtime_dependency %q<tvdeyen-fleximage>, ["~> 1.2.0"]
29
+ s.add_runtime_dependency %q<kaminari>, ["~> 0.13.0"]
30
+ s.add_runtime_dependency %q<acts_as_ferret>, ["~> 0.5"]
31
+ s.add_runtime_dependency %q<acts_as_list>, ["~> 0.1"]
32
+ s.add_runtime_dependency %q<magiclabs-userstamp>, ["~> 2.0.2"]
33
+ s.add_runtime_dependency %q<dynamic_form>, ["~> 1.1"]
34
+ s.add_runtime_dependency %q<jquery-rails>, ["~> 2.1.3"]
35
+ s.add_runtime_dependency %q<attachment_magic>, ["~> 0.2.1"]
36
+ s.add_runtime_dependency %q<sass-rails>, ['~> 3.2.3']
37
+ s.add_runtime_dependency %q<coffee-rails>, ['~> 3.2.1']
38
+ s.add_runtime_dependency %q<compass-rails>, ['~> 1.0.3']
39
+ s.add_runtime_dependency %q<sassy-buttons>, ['~> 0.1.3']
40
40
 
41
- s.add_development_dependency(%q<bumpy>)
42
- s.add_development_dependency(%q<capybara>)
43
- s.add_development_dependency(%q<factory_girl_rails>, ['~> 1.7.0'])
44
- s.add_development_dependency(%q<rspec-rails>, ['2.12.0'])
45
- s.add_development_dependency(%q<sqlite3>)
46
- s.add_development_dependency(%q<yard>)
41
+ s.add_development_dependency %q<bumpy>
42
+ s.add_development_dependency %q<capybara>
43
+ s.add_development_dependency %q<factory_girl_rails>
44
+ s.add_development_dependency %q<rspec-rails>
45
+ s.add_development_dependency %q<sqlite3>
46
+ s.add_development_dependency %q<yard>
47
47
 
48
48
  end
@@ -111,7 +111,7 @@ if (typeof(Alchemy) === 'undefined') {
111
111
  setElementSaved: function(selector) {
112
112
  var $element = $(selector);
113
113
  Alchemy.setElementClean(selector);
114
- Alchemy.enableButton('button.button', $element);
114
+ Alchemy.Buttons.enable($element);
115
115
  },
116
116
 
117
117
  resizeFrame: function() {
@@ -166,7 +166,7 @@ if (typeof(Alchemy) === 'undefined') {
166
166
  },
167
167
 
168
168
  SelectBox: function(scope) {
169
- $('select', scope).selectBoxIt();
169
+ $('select.alchemy_selectbox', scope).selectBoxIt();
170
170
  },
171
171
 
172
172
  Buttons: function(options) {
@@ -0,0 +1,31 @@
1
+ window.Alchemy = {} if window.Alchemy == undefined
2
+
3
+ Alchemy.Buttons =
4
+
5
+ observe: (scope) ->
6
+ $('form', scope).not('.button_with_label form').on 'submit', (event) ->
7
+ $btn = $(this).find(':submit')
8
+ if $btn.attr('disabled') == 'disabled'
9
+ event.preventDefault()
10
+ event.stopPropagation()
11
+ false
12
+ else
13
+ Alchemy.Buttons.disable($btn)
14
+
15
+ disable: (button) ->
16
+ $button = $(button)
17
+ spinner = '<img src="/assets/alchemy/ajax_loader.gif" style="width: 16px; height: 16px">'
18
+ $button.data('label', $button.text())
19
+ $button.attr('disabled', true)
20
+ $button.addClass('disabled')
21
+ $button.css
22
+ width: $button.outerWidth()
23
+ $button.html(spinner)
24
+ return true
25
+
26
+ enable: (scope) ->
27
+ $button = $('form :submit:disabled', scope)
28
+ $button.removeClass('disabled')
29
+ $button.removeAttr('disabled')
30
+ $button.text($button.data('label'))
31
+ return true
@@ -100,7 +100,7 @@ if (typeof(Alchemy) === 'undefined') {
100
100
  $(this).draggable({
101
101
  helper: 'clone',
102
102
  iframeFix: 'iframe#alchemyPreviewWindow',
103
- connectToSortable: cell_classes,
103
+ connectToSortable: cell_classes.replace(/,.$/, ''),
104
104
  start: function(event, ui) {
105
105
  $(this).hide().addClass('dragged');
106
106
  ui.helper.css({
@@ -10,16 +10,20 @@ if (typeof(Alchemy) === 'undefined') {
10
10
  Alchemy.ElementsWindow = {
11
11
 
12
12
  init: function(path, options, callback) {
13
+ var self = Alchemy.ElementsWindow;
13
14
  var $dialog = $('<div style="display: none" id="alchemyElementWindow"></div>');
14
15
  var closeCallback = function() {
15
16
  $dialog.dialog("destroy");
16
17
  $('#alchemyElementWindow').remove();
17
18
  Alchemy.ElementsWindow.button.enable();
18
19
  };
20
+ self.path = path;
21
+ self.callback = callback;
19
22
  $dialog.html(Alchemy.getOverlaySpinner({
20
23
  x: 420,
21
24
  y: 300
22
25
  }));
26
+ self.dialog = $dialog;
23
27
  Alchemy.ElementsWindow.currentWindow = $dialog.dialog({
24
28
  modal: false,
25
29
  minWidth: 422,
@@ -35,21 +39,7 @@ if (typeof(Alchemy) === 'undefined') {
35
39
  },
36
40
  open: function(event, ui) {
37
41
  Alchemy.ElementsWindow.button.disable();
38
- $.ajax({
39
- url: path,
40
- success: function(data, textStatus, XMLHttpRequest) {
41
- $dialog.html(data);
42
- Alchemy.ButtonObserver('#alchemyElementWindow .button');
43
- Alchemy.overlayObserver('#alchemyElementWindow');
44
- Alchemy.Datepicker('#alchemyElementWindow input.date, #alchemyElementWindow input[type="date"]');
45
- if (callback) {
46
- callback.call();
47
- }
48
- },
49
- error: function(XMLHttpRequest, textStatus, errorThrown) {
50
- Alchemy.AjaxErrorHandler($dialog, XMLHttpRequest.status, textStatus, errorThrown);
51
- }
52
- });
42
+ Alchemy.ElementsWindow.reload(callback);
53
43
  },
54
44
  beforeClose: function() {
55
45
  if (Alchemy.isPageDirty()) {
@@ -104,6 +94,25 @@ if (typeof(Alchemy) === 'undefined') {
104
94
  }));
105
95
  }
106
96
  return $toolbar;
97
+ },
98
+
99
+ reload: function() {
100
+ var self = Alchemy.ElementsWindow;
101
+ $.ajax({
102
+ url: self.path,
103
+ success: function(data, textStatus, XMLHttpRequest) {
104
+ self.dialog.html(data);
105
+ Alchemy.Buttons.observe('#alchemyElementWindow');
106
+ Alchemy.overlayObserver('#alchemyElementWindow');
107
+ Alchemy.Datepicker('#alchemyElementWindow input.date, #alchemyElementWindow input[type="date"]');
108
+ if (self.callback) {
109
+ self.callback.call();
110
+ }
111
+ },
112
+ error: function(XMLHttpRequest, textStatus, errorThrown) {
113
+ Alchemy.AjaxErrorHandler($dialog, XMLHttpRequest.status, textStatus, errorThrown);
114
+ }
115
+ });
107
116
  }
108
117
 
109
118
  }
@@ -1,11 +1,17 @@
1
- if typeof window.Alchemy == 'undefined'
2
- window.Alchemy = {}
1
+ window.Alchemy = {} if window.Alchemy == undefined
3
2
 
4
3
  Alchemy.GUI =
5
4
 
5
+ init: ->
6
+ Alchemy.Tooltips()
7
+ Alchemy.SelectBox()
8
+ Alchemy.Datepicker()
9
+ Alchemy.Buttons.observe()
10
+ Alchemy.resizeFrame()
11
+
6
12
  initElement: ($el) ->
7
13
  Alchemy.ElementDirtyObserver($el)
8
14
  Alchemy.SelectBox($el)
9
- Alchemy.ButtonObserver('button.button', $el)
15
+ Alchemy.Buttons.observe($el)
10
16
  Alchemy.Datepicker('input[type="date"]', $el)
11
17
  Alchemy.overlayObserver($el)
@@ -30,12 +30,12 @@ Alchemy.loadjQuery = function(callback) {
30
30
  head.appendChild(script);
31
31
  }
32
32
 
33
- getScript('//code.jquery.com/jquery.min.js', function() {
33
+ getScript('//ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js', function() {
34
34
  if (typeof(jQuery) !== 'undefined') {
35
35
  if (thisPageUsingOtherJSLibrary) {
36
36
  jQuery.noConflict();
37
37
  }
38
- callback(jQuery);
38
+ callback();
39
39
  }
40
40
  });
41
41
 
@@ -18,6 +18,7 @@
18
18
  //= require alchemy/alchemy.image_cropper
19
19
  //= require alchemy/alchemy.js_extensions
20
20
  //= require alchemy/alchemy.link_overlay
21
+ //= require alchemy/alchemy.onload
21
22
  //= require alchemy/alchemy.page_sorter
22
23
  //= require alchemy/alchemy.uploader
23
24
  //= require alchemy/alchemy.file_progress
@@ -6,20 +6,12 @@ Alchemy.loadAlchemyMenuBar = function(options) {
6
6
 
7
7
  Alchemy.Menubar = {
8
8
 
9
- init: function ($) {
10
- var self = Alchemy.Menubar;
11
- self._$ = $;
12
- self.show();
13
- },
14
-
15
9
  show: function() {
16
- var self = Alchemy.Menubar;
17
- self._$('body').prepend(Alchemy.Menubar.build());
10
+ $('body').prepend(Alchemy.Menubar.build());
18
11
  },
19
12
 
20
13
  build: function() {
21
- var self = Alchemy.Menubar;
22
- var bar = self._$('<div id="alchemy_menubar"/>').append('<ul/>');
14
+ var bar = $('<div id="alchemy_menubar"/>').append('<ul/>');
23
15
  bar.find('ul').append('<li><a href="' + options.route + '/admin">' + Alchemy.Menubar.t("to_alchemy") + '</a></li>').append('<li><a href="' + options.route + '/admin/pages/' + options.page_id + '/edit">' + Alchemy.Menubar.t("edit_page") + '</a></li>').append('<li><a href="' + options.route + '/admin/logout">' + Alchemy.Menubar.t("logout") + '</a></li>');
24
16
  return bar;
25
17
  },
@@ -51,9 +43,9 @@ Alchemy.loadAlchemyMenuBar = function(options) {
51
43
  };
52
44
 
53
45
  if (typeof(jQuery) === 'undefined') {
54
- Alchemy.loadjQuery(Alchemy.Menubar.init);
46
+ Alchemy.loadjQuery(Alchemy.Menubar.show);
55
47
  } else {
56
- Alchemy.Menubar.init(jQuery);
48
+ Alchemy.Menubar.show();
57
49
  }
58
50
 
59
51
  };
@@ -0,0 +1,32 @@
1
+ $ ->
2
+ # Preloading all background images from CSS files.
3
+ $.preloadCssImages()
4
+
5
+ # We obviously have javascript enabled.
6
+ $('html').removeClass('no-js')
7
+
8
+ # Initialize the GUI.
9
+ Alchemy.GUI.init()
10
+
11
+ # Fade all growl notifications.
12
+ if $('#flash_notices').length > 0
13
+ Alchemy.Growler.fade()
14
+
15
+ # Add observer for please wait overlay.
16
+ $('a.please_wait, #main_navi a.main_navi_entry, div.button_with_label form :submit, #sub_navigation .subnavi_tab a, .pagination a')
17
+ .not('*[data-alchemy-confirm], #subnav_additions .subnavi_tab button')
18
+ .click ->
19
+ Alchemy.pleaseWaitOverlay()
20
+
21
+ # Hack for enabling tab focus for <a>'s styled as button.
22
+ $('a.button').attr({tabindex: 0})
23
+
24
+ # Locale select handler
25
+ $('select#change_locale').on 'change', (e) ->
26
+ url = Alchemy.current_url
27
+ delimiter = url.match(/\?/) ? '&' : '?'
28
+ window.location = url + delimiter + 'locale=' + $(this).val()
29
+
30
+ # Resize the Alchemy frame on every browser resize.
31
+ jQuery(window).resize ->
32
+ Alchemy.resizeFrame()