alchemy_cms 3.0.0.rc7 → 3.0.0.rc8

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 (69) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +2 -1
  3. data/README.md +1 -1
  4. data/app/assets/javascripts/alchemy/alchemy.dragndrop.js.coffee +0 -2
  5. data/app/assets/javascripts/alchemy/alchemy.element_editors.js.coffee +1 -1
  6. data/app/assets/javascripts/alchemy/alchemy.elements_window.js.coffee +26 -2
  7. data/app/assets/javascripts/alchemy/alchemy.preview_window.js.coffee +1 -1
  8. data/app/assets/javascripts/alchemy/alchemy.translations.js.coffee +22 -0
  9. data/app/assets/stylesheets/alchemy/base.scss +1 -5
  10. data/app/assets/stylesheets/alchemy/elements.scss +11 -61
  11. data/app/assets/stylesheets/alchemy/frame.scss +1 -1
  12. data/app/assets/stylesheets/tinymce/skins/alchemy/skin.min.css.scss +1 -1
  13. data/app/controllers/alchemy/admin/attachments_controller.rb +1 -1
  14. data/app/controllers/alchemy/admin/base_controller.rb +7 -13
  15. data/app/controllers/alchemy/admin/clipboard_controller.rb +15 -10
  16. data/app/controllers/alchemy/admin/elements_controller.rb +15 -11
  17. data/app/controllers/alchemy/admin/essence_pictures_controller.rb +8 -1
  18. data/app/controllers/alchemy/admin/pages_controller.rb +95 -22
  19. data/app/controllers/alchemy/admin/tags_controller.rb +1 -1
  20. data/app/controllers/alchemy/pictures_controller.rb +33 -32
  21. data/app/helpers/alchemy/admin/base_helper.rb +3 -16
  22. data/app/models/alchemy/element.rb +1 -1
  23. data/app/models/alchemy/page/page_naming.rb +4 -2
  24. data/app/models/alchemy/page/page_natures.rb +1 -1
  25. data/app/models/alchemy/page.rb +20 -1
  26. data/app/models/alchemy/picture.rb +1 -0
  27. data/app/models/alchemy/tree_node.rb +4 -0
  28. data/app/views/alchemy/admin/contents/destroy.js.erb +4 -0
  29. data/app/views/alchemy/admin/dashboard/index.html.erb +1 -1
  30. data/app/views/alchemy/admin/elements/_element.html.erb +11 -12
  31. data/app/views/alchemy/admin/elements/_new_element_form.html.erb +0 -3
  32. data/app/views/alchemy/admin/elements/create.js.erb +3 -3
  33. data/app/views/alchemy/admin/elements/index.html.erb +4 -19
  34. data/app/views/alchemy/admin/elements/new.html.erb +0 -3
  35. data/app/views/alchemy/admin/elements/trash.js.erb +12 -16
  36. data/app/views/alchemy/admin/pages/_page.html.erb +1 -1
  37. data/app/views/alchemy/admin/pages/edit.html.erb +36 -30
  38. data/app/views/alchemy/admin/pictures/edit_multiple.html.erb +1 -1
  39. data/app/views/alchemy/admin/trash/clear.js.erb +4 -0
  40. data/config/locales/alchemy.de.yml +56 -84
  41. data/config/locales/alchemy.en.yml +326 -105
  42. data/config/locales/alchemy.fr.yml +942 -0
  43. data/config/locales/alchemy.nl.yml +111 -137
  44. data/config/locales/simple_form.fr.yml +26 -0
  45. data/lib/alchemy/engine.rb +7 -1
  46. data/lib/alchemy/i18n.rb +7 -1
  47. data/lib/alchemy/middleware/rescue_old_cookies.rb +27 -0
  48. data/lib/alchemy/permissions.rb +1 -1
  49. data/lib/alchemy/version.rb +1 -1
  50. data/spec/controllers/admin/clipboard_controller_spec.rb +16 -19
  51. data/spec/controllers/admin/elements_controller_spec.rb +20 -23
  52. data/spec/controllers/admin/essence_pictures_controller_spec.rb +22 -6
  53. data/spec/controllers/admin/pages_controller_spec.rb +94 -5
  54. data/spec/controllers/pictures_controller_spec.rb +44 -3
  55. data/spec/features/admin/link_overlay_spec.rb +1 -0
  56. data/spec/features/admin/locale_select_feature_spec.rb +22 -0
  57. data/spec/libraries/i18n_spec.rb +30 -0
  58. data/spec/libraries/permissions_spec.rb +1 -1
  59. data/spec/models/element_spec.rb +5 -4
  60. data/spec/models/page_spec.rb +137 -8
  61. data/spec/spec_helper.rb +23 -19
  62. data/vendor/assets/javascripts/jquery_plugins/jquery.ui.nestedSortable.js +9 -3
  63. metadata +12 -10
  64. data/app/models/alchemy/clipboard.rb +0 -74
  65. data/app/views/alchemy/admin/contents/destroy.js.coffee +0 -4
  66. data/app/views/alchemy/admin/elements/_add_element_button.html.erb +0 -18
  67. data/app/views/alchemy/admin/trash/clear.js.coffee +0 -4
  68. data/spec/models/clipboard_spec.rb +0 -111
  69. data/spec/support/phantomjs_mavericks_fix.rb +0 -32
@@ -164,10 +164,9 @@ module Alchemy
164
164
  end
165
165
 
166
166
  describe 'Picture processing' do
167
- context "with crop and size parameters" do
168
-
169
- let(:big_picture) { Picture.create(image_file: fixture_file_upload(File.expand_path('../../fixtures/80x60.png', __FILE__), 'image/png')) }
167
+ let(:big_picture) { Picture.create(:image_file => fixture_file_upload(File.expand_path('../../fixtures/80x60.png', __FILE__), 'image/png')) }
170
168
 
169
+ context "with crop and size parameters" do
171
170
  it "should return a cropped image." do
172
171
  options = {
173
172
  crop: 'crop',
@@ -178,6 +177,19 @@ module Alchemy
178
177
  response.body[0x10..0x18].unpack('NN').should == [10,10]
179
178
  end
180
179
 
180
+ context "without a full size specification" do
181
+ it "should raise an error" do
182
+ options = {
183
+ :crop => 'crop',
184
+ :size => '10',
185
+ :format => 'png'
186
+ }
187
+ expect do
188
+ get :show, options.merge(:id => big_picture.id, :sh => big_picture.security_token(options))
189
+ end.to raise_error ArgumentError
190
+ end
191
+ end
192
+
181
193
  context "without upsample parameter" do
182
194
  it "should not upsample the image." do
183
195
  options = {
@@ -203,6 +215,35 @@ module Alchemy
203
215
  end
204
216
  end
205
217
  end
218
+
219
+ context "without crop but with size parameter" do
220
+ it "should resize the image preserving aspect ratio" do
221
+ options = {
222
+ :size => '40x40',
223
+ :format => 'png'
224
+ }
225
+ get :show, options.merge(:id => big_picture.id, :sh => big_picture.security_token(options))
226
+ response.body[0x10..0x18].unpack('NN').should == [40,30]
227
+ end
228
+
229
+ it "should resize the image inferring the height if not given" do
230
+ options = {
231
+ :size => '40x',
232
+ :format => 'png'
233
+ }
234
+ get :show, options.merge(:id => big_picture.id, :sh => big_picture.security_token(options))
235
+ response.body[0x10..0x18].unpack('NN').should == [40,30]
236
+ end
237
+
238
+ it "should resize the image inferring the width if not given" do
239
+ options = {
240
+ :size => 'x30',
241
+ :format => 'png'
242
+ }
243
+ get :show, options.merge(:id => big_picture.id, :sh => big_picture.security_token(options))
244
+ response.body[0x10..0x18].unpack('NN').should == [40,30]
245
+ end
246
+ end
206
247
  end
207
248
 
208
249
  end
@@ -46,6 +46,7 @@ describe "Link overlay" do
46
46
  Alchemy::Page.any_instance.stub(:definition).and_return({'redirects_to_external' => true})
47
47
  visit link_admin_pages_path
48
48
  page.should_not have_selector('ul#sitemap li div[name="/http-www-google-com"] a')
49
+ Alchemy::Page.any_instance.unstub(:definition)
49
50
  end
50
51
 
51
52
  end
@@ -0,0 +1,22 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'Locale select' do
4
+ let(:a_page) { FactoryGirl.create(:public_page) }
5
+ before do
6
+ Alchemy::I18n.stub(translation_files: ['alchemy.kl.yml', 'alchemy.jp.yml', 'alchemy.cz.yml'])
7
+ authorize_as_admin
8
+ end
9
+
10
+ it "contains all locales in a selectbox" do
11
+ visit admin_dashboard_path
12
+ expect(page).to have_select('change_locale', options: ['Kl', 'Jp', 'Cz'])
13
+ end
14
+
15
+ context 'when having available_locales set for Alchemy::I18n' do
16
+ before { Alchemy::I18n.stub(available_locales: [:jp, :cz]) }
17
+ it "provides only that locales" do
18
+ visit admin_dashboard_path
19
+ expect(page).to have_select('change_locale', options: ['Jp', 'Cz'])
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,30 @@
1
+ require 'spec_helper'
2
+
3
+ module Alchemy
4
+ describe I18n do
5
+ describe '.translation_files' do
6
+ subject { I18n.translation_files }
7
+ it { should be_a Array }
8
+ it { should be_any { |f| f =~ /alchemy.*.yml/ } }
9
+ end
10
+
11
+ describe '.available_locales' do
12
+ subject { I18n.available_locales }
13
+ before { I18n.stub(translation_files: ['alchemy.kl.yml']) }
14
+ it { should be_a Array }
15
+ it { should include :kl }
16
+
17
+ context 'when locales are already set in @@available_locales' do
18
+ before { I18n.class_variable_set(:@@available_locales, [:kl, :jp]) }
19
+ it { should eq([:kl, :jp]) }
20
+ end
21
+ end
22
+
23
+ describe '.available_locales=' do
24
+ it "assigns the given locales to @@available_locales" do
25
+ I18n.available_locales = [:kl, :nl, :cn]
26
+ expect(I18n.class_variable_get(:@@available_locales)).to eq([:kl, :nl, :cn])
27
+ end
28
+ end
29
+ end
30
+ end
@@ -153,7 +153,7 @@ describe Alchemy::Permissions do
153
153
  end
154
154
 
155
155
  it "can manage the clipboard" do
156
- should be_able_to(:manage, Alchemy::Clipboard)
156
+ should be_able_to(:manage, :alchemy_admin_clipboard)
157
157
  end
158
158
 
159
159
  it "can see tags" do
@@ -122,11 +122,12 @@ module Alchemy
122
122
  describe '.all_from_clipboard_for_page' do
123
123
  let(:element_1) { FactoryGirl.build_stubbed(:element) }
124
124
  let(:element_2) { FactoryGirl.build_stubbed(:element, name: 'news') }
125
- let(:page) { FactoryGirl.build_stubbed(:public_page) }
126
- let(:clipboard) { [{id: element_1.id}, {id: element_2.id}] }
127
- before {
125
+ let(:page) { FactoryGirl.build_stubbed(:public_page) }
126
+ let(:clipboard) { [{'id' => element_1.id.to_s}, {'id' => element_2.id.to_s}] }
127
+
128
+ before do
128
129
  Element.stub(:all_from_clipboard).and_return([element_1, element_2])
129
- }
130
+ end
130
131
 
131
132
  it "return all elements from clipboard that could be placed on page" do
132
133
  elements = Element.all_from_clipboard_for_page(clipboard, page)
@@ -106,9 +106,20 @@ module Alchemy
106
106
  expect(external_page).to be_valid
107
107
  end
108
108
 
109
- it "only be valid with urlname given" do
110
- external_page.urlname = ''
111
- expect(external_page).to_not be_valid
109
+ context 'on create' do
110
+ it "is valid without urlname given" do
111
+ external_page.urlname = ''
112
+ expect(external_page).to be_valid
113
+ end
114
+ end
115
+
116
+ context 'on update' do
117
+ before { external_page.save! }
118
+
119
+ it "is not valid without urlname given" do
120
+ external_page.urlname = ''
121
+ expect(external_page).to_not be_valid
122
+ end
112
123
  end
113
124
  end
114
125
  end
@@ -313,8 +324,8 @@ module Alchemy
313
324
  page_1 = FactoryGirl.create(:page, :language => language)
314
325
  page_2 = FactoryGirl.create(:page, :language => language, :name => 'Another page')
315
326
  clipboard = [
316
- {:id => page_1.id, :action => "copy"},
317
- {:id => page_2.id, :action => "copy"}
327
+ {'id' => page_1.id.to_s, 'action' => 'copy'},
328
+ {'id' => page_2.id.to_s, 'action' => 'copy'}
318
329
  ]
319
330
  Page.all_from_clipboard_for_select(clipboard, language.id).should include(page_1, page_2)
320
331
  end
@@ -324,7 +335,7 @@ module Alchemy
324
335
  it "should not return any pages" do
325
336
  page_1 = FactoryGirl.create(:page, :language => language, :page_layout => 'contact')
326
337
  clipboard = [
327
- {:id => page_1.id, :action => "copy"}
338
+ {'id' => page_1.id.to_s, 'action' => 'copy'}
328
339
  ]
329
340
  Page.all_from_clipboard_for_select(clipboard, language.id).should == []
330
341
  end
@@ -335,8 +346,8 @@ module Alchemy
335
346
  page_1 = FactoryGirl.create(:page, :language => language, :page_layout => 'standard')
336
347
  page_2 = FactoryGirl.create(:page, :name => 'Another page', :language => language, :page_layout => 'contact')
337
348
  clipboard = [
338
- {:id => page_1.id, :action => "copy"},
339
- {:id => page_2.id, :action => "copy"}
349
+ {'id' => page_1.id.to_s, 'action' => 'copy'},
350
+ {'id' => page_2.id.to_s, 'action' => 'copy'}
340
351
  ]
341
352
  Page.all_from_clipboard_for_select(clipboard, language.id).should == [page_1]
342
353
  end
@@ -1265,6 +1276,124 @@ module Alchemy
1265
1276
  end
1266
1277
  end
1267
1278
 
1279
+ describe "#update_node!" do
1280
+
1281
+ let(:original_url) { "sample-url" }
1282
+ let(:page) { FactoryGirl.create(:page, :language => language, :parent_id => language_root.id, :urlname => original_url, restricted: false) }
1283
+ let(:node) { TreeNode.new(10, 11, 12, 13, "another-url", true) }
1284
+
1285
+ context "when nesting is enabled" do
1286
+ before { Alchemy::Config.stub(:get).with(:url_nesting) { true } }
1287
+
1288
+ context "when page is not external" do
1289
+
1290
+ before { page.stub(redirects_to_external?: false)}
1291
+
1292
+ it "should update all attributes" do
1293
+ page.update_node!(node)
1294
+ page.reload
1295
+ expect(page.lft).to eq(node.left)
1296
+ expect(page.rgt).to eq(node.right)
1297
+ expect(page.parent_id).to eq(node.parent)
1298
+ expect(page.depth).to eq(node.depth)
1299
+ expect(page.urlname).to eq(node.url)
1300
+ expect(page.restricted).to eq(node.restricted)
1301
+ end
1302
+
1303
+ context "when url is the same" do
1304
+ let(:node) { TreeNode.new(10, 11, 12, 13, original_url, true) }
1305
+
1306
+ it "should not create a legacy url" do
1307
+ page.update_node!(node)
1308
+ page.reload
1309
+ expect(page.legacy_urls.size).to eq(0)
1310
+ end
1311
+ end
1312
+
1313
+ context "when url is not the same" do
1314
+ it "should create a legacy url" do
1315
+ page.update_node!(node)
1316
+ page.reload
1317
+ expect(page.legacy_urls.size).to eq(1)
1318
+ end
1319
+ end
1320
+ end
1321
+
1322
+ context "when page is external" do
1323
+
1324
+ before { page.stub(redirects_to_external?: true) }
1325
+
1326
+ it "should update all attributes except url" do
1327
+ page.update_node!(node)
1328
+ page.reload
1329
+ expect(page.lft).to eq(node.left)
1330
+ expect(page.rgt).to eq(node.right)
1331
+ expect(page.parent_id).to eq(node.parent)
1332
+ expect(page.depth).to eq(node.depth)
1333
+ expect(page.urlname).to eq(original_url)
1334
+ expect(page.restricted).to eq(node.restricted)
1335
+ end
1336
+
1337
+ it "should not create a legacy url" do
1338
+ page.update_node!(node)
1339
+ page.reload
1340
+ expect(page.legacy_urls.size).to eq(0)
1341
+ end
1342
+ end
1343
+ end
1344
+
1345
+ context "when nesting is disabled" do
1346
+ before { Alchemy::Config.stub(:get).with(:url_nesting) { false } }
1347
+
1348
+ context "when page is not external" do
1349
+
1350
+ before { page.stub(redirects_to_external?: false)}
1351
+
1352
+ it "should update all attributes except url" do
1353
+ page.update_node!(node)
1354
+ page.reload
1355
+ expect(page.lft).to eq(node.left)
1356
+ expect(page.rgt).to eq(node.right)
1357
+ expect(page.parent_id).to eq(node.parent)
1358
+ expect(page.depth).to eq(node.depth)
1359
+ expect(page.urlname).to eq(original_url)
1360
+ expect(page.restricted).to eq(node.restricted)
1361
+ end
1362
+
1363
+ it "should not create a legacy url" do
1364
+ page.update_node!(node)
1365
+ page.reload
1366
+ expect(page.legacy_urls.size).to eq(0)
1367
+ end
1368
+
1369
+ end
1370
+
1371
+ context "when page is external" do
1372
+
1373
+ before { page.stub(redirects_to_external?: true) }
1374
+
1375
+ before { Alchemy::Config.stub(get: true) }
1376
+
1377
+ it "should update all attributes except url" do
1378
+ page.update_node!(node)
1379
+ page.reload
1380
+ expect(page.lft).to eq(node.left)
1381
+ expect(page.rgt).to eq(node.right)
1382
+ expect(page.parent_id).to eq(node.parent)
1383
+ expect(page.depth).to eq(node.depth)
1384
+ expect(page.urlname).to eq(original_url)
1385
+ expect(page.restricted).to eq(node.restricted)
1386
+ end
1387
+
1388
+ it "should not create a legacy url" do
1389
+ page.update_node!(node)
1390
+ page.reload
1391
+ expect(page.legacy_urls.size).to eq(0)
1392
+ end
1393
+ end
1394
+ end
1395
+ end
1396
+
1268
1397
  describe '#slug' do
1269
1398
  context "with parents path saved in urlname" do
1270
1399
  let(:page) { FactoryGirl.build(:page, urlname: 'root/parent/my-name')}
data/spec/spec_helper.rb CHANGED
@@ -33,27 +33,14 @@ require 'alchemy/test_support/controller_requests'
33
33
  require 'alchemy/test_support/integration_helpers'
34
34
  require 'alchemy/test_support/factories'
35
35
  require 'alchemy/test_support/essence_shared_examples'
36
- require_relative "support/test_tweaks.rb"
37
36
  require_relative "support/hint_examples.rb"
38
37
 
39
- # Temporay fix for mavericks phantomjs bug
40
- if RUBY_PLATFORM =~ /darwin/
41
- require_relative "support/phantomjs_mavericks_fix.rb"
42
- Capybara.register_driver :poltergeist do |app|
43
- Capybara::Poltergeist::Driver.new(app, {
44
- phantomjs_logger: Alchemy::WarningSuppressor,
45
- js_errors: false
46
- })
47
- end
48
- else
49
- Capybara.register_driver :poltergeist do |app|
50
- Capybara::Poltergeist::Driver.new(app, js_errors: false)
51
- end
52
- end
53
-
54
38
  # Configure capybara for integration testing
55
39
  Capybara.default_driver = :rack_test
56
40
  Capybara.default_selector = :css
41
+ Capybara.register_driver :poltergeist do |app|
42
+ Capybara::Poltergeist::Driver.new(app, js_errors: false)
43
+ end
57
44
  Capybara.register_driver(:rack_test_translated_header) do |app|
58
45
  Capybara::RackTest::Driver.new(app, headers: { 'HTTP_ACCEPT_LANGUAGE' => 'de' })
59
46
  end
@@ -70,15 +57,32 @@ RSpec.configure do |config|
70
57
  config.include Alchemy::TestSupport::IntegrationHelpers, type: :feature
71
58
  config.include FactoryGirl::Syntax::Methods
72
59
 
73
- config.use_transactional_fixtures = true
60
+ config.use_transactional_fixtures = false
74
61
  # Make sure the database is clean and ready for test
75
62
  config.before(:suite) do
76
- truncate_all_tables
63
+ DatabaseCleaner.clean_with(:truncation)
77
64
  Alchemy::Seeder.seed!
78
65
  end
79
- # Ensuring that the locale is always resetted to :en before running any tests
66
+
67
+ # All specs are running in transactions, but feature specs not.
80
68
  config.before(:each) do
81
69
  Alchemy::Site.current = nil
82
70
  ::I18n.locale = :en
71
+ if example.metadata[:type] == :feature
72
+ DatabaseCleaner.strategy = :truncation
73
+ else
74
+ DatabaseCleaner.strategy = :transaction
75
+ end
76
+ DatabaseCleaner.start
77
+ end
78
+
79
+ # After each spec the database gets cleaned. (via rollback or truncate for feature specs)
80
+ # After every feature spec the database gets seeded so the next spec can rely on that data.
81
+ config.append_after(:each) do
82
+ DatabaseCleaner.clean
83
+ if example.metadata[:type] == :feature
84
+ Alchemy::Seeder.stub(:puts)
85
+ Alchemy::Seeder.seed!
86
+ end
83
87
  end
84
88
  end
@@ -168,7 +168,7 @@
168
168
  var newList = document.createElement(o.listType);
169
169
 
170
170
  this.beyondMaxLevels = 0;
171
-
171
+
172
172
  // If the item is moved to the left, send it to its parent's level unless there are siblings below it.
173
173
  if (parentItem != null && nextItem == null &&
174
174
  (o.rtl && (this.positionAbs.left + this.helper.outerWidth() > parentItem.offset().left + parentItem.outerWidth()) ||
@@ -284,8 +284,14 @@
284
284
 
285
285
  function _recursiveItems(item) {
286
286
  var id = ($(item).attr(o.attribute || 'id') || '').match(o.expression || (/(.+)[-=_](.+)/));
287
+
288
+ var restricted = $(item).data("restricted");
289
+ var slug = $(item).data("slug");
290
+ var external = $(item).data("external");
291
+ var visible = $(item).data("visible");
292
+
287
293
  if (id) {
288
- var currentItem = {"id" : id[2]};
294
+ var currentItem = {"id" : id[2], "slug" : slug, "restricted" : restricted, "external" : external, "visible" : visible};
289
295
  if ($(item).children(o.listType).children(o.items).length > 0) {
290
296
  currentItem.children = [];
291
297
  $(item).children(o.listType).children(o.items).each(function() {
@@ -372,7 +378,7 @@
372
378
 
373
379
  if (this.options.listType) {
374
380
  var list = item.closest(this.options.listType);
375
- while (list && list.length > 0 &&
381
+ while (list && list.length > 0 &&
376
382
  !list.is('.ui-sortable')) {
377
383
  level++;
378
384
  list = list.parent().closest(this.options.listType);
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: 3.0.0.rc7
4
+ version: 3.0.0.rc8
5
5
  platform: ruby
6
6
  authors:
7
7
  - Thomas von Deyen
@@ -12,7 +12,7 @@ authors:
12
12
  autorequire:
13
13
  bindir: bin
14
14
  cert_chain: []
15
- date: 2014-06-04 00:00:00.000000000 Z
15
+ date: 2014-06-18 00:00:00.000000000 Z
16
16
  dependencies:
17
17
  - !ruby/object:Gem::Dependency
18
18
  name: rails
@@ -543,7 +543,6 @@ files:
543
543
  - app/models/alchemy.rb
544
544
  - app/models/alchemy/attachment.rb
545
545
  - app/models/alchemy/cell.rb
546
- - app/models/alchemy/clipboard.rb
547
546
  - app/models/alchemy/content.rb
548
547
  - app/models/alchemy/content/factory.rb
549
548
  - app/models/alchemy/element.rb
@@ -575,6 +574,7 @@ files:
575
574
  - app/models/alchemy/site.rb
576
575
  - app/models/alchemy/site/layout.rb
577
576
  - app/models/alchemy/tag.rb
577
+ - app/models/alchemy/tree_node.rb
578
578
  - app/serializers/alchemy/attachment_serializer.rb
579
579
  - app/serializers/alchemy/cell_serializer.rb
580
580
  - app/serializers/alchemy/content_serializer.rb
@@ -610,7 +610,7 @@ files:
610
610
  - app/views/alchemy/admin/clipboard/remove.js.erb
611
611
  - app/views/alchemy/admin/contents/_missing.html.erb
612
612
  - app/views/alchemy/admin/contents/create.js.erb
613
- - app/views/alchemy/admin/contents/destroy.js.coffee
613
+ - app/views/alchemy/admin/contents/destroy.js.erb
614
614
  - app/views/alchemy/admin/contents/new.html.erb
615
615
  - app/views/alchemy/admin/contents/order.js.erb
616
616
  - app/views/alchemy/admin/dashboard/_locked_pages.html.erb
@@ -620,7 +620,6 @@ files:
620
620
  - app/views/alchemy/admin/dashboard/help.html.erb
621
621
  - app/views/alchemy/admin/dashboard/index.html.erb
622
622
  - app/views/alchemy/admin/dashboard/info.html.erb
623
- - app/views/alchemy/admin/elements/_add_element_button.html.erb
624
623
  - app/views/alchemy/admin/elements/_add_picture.html.erb
625
624
  - app/views/alchemy/admin/elements/_element.html.erb
626
625
  - app/views/alchemy/admin/elements/_element_foot.html.erb
@@ -727,7 +726,7 @@ files:
727
726
  - app/views/alchemy/admin/tags/edit.html.erb
728
727
  - app/views/alchemy/admin/tags/index.html.erb
729
728
  - app/views/alchemy/admin/tags/new.html.erb
730
- - app/views/alchemy/admin/trash/clear.js.coffee
729
+ - app/views/alchemy/admin/trash/clear.js.erb
731
730
  - app/views/alchemy/admin/trash/index.html.erb
732
731
  - app/views/alchemy/attachments/show.html.erb
733
732
  - app/views/alchemy/base/500.html.erb
@@ -792,9 +791,11 @@ files:
792
791
  - config/initializers/simple_form.rb
793
792
  - config/locales/alchemy.de.yml
794
793
  - config/locales/alchemy.en.yml
794
+ - config/locales/alchemy.fr.yml
795
795
  - config/locales/alchemy.nl.yml
796
796
  - config/locales/simple_form.de.yml
797
797
  - config/locales/simple_form.en.yml
798
+ - config/locales/simple_form.fr.yml
798
799
  - config/locales/simple_form.nl.yml
799
800
  - config/routes.rb
800
801
  - db/migrate/20130827094554_alchemy_two_point_six.rb
@@ -817,6 +818,7 @@ files:
817
818
  - lib/alchemy/kaminari/scoped_pagination_url_helper.rb
818
819
  - lib/alchemy/locale.rb
819
820
  - lib/alchemy/logger.rb
821
+ - lib/alchemy/middleware/rescue_old_cookies.rb
820
822
  - lib/alchemy/modules.rb
821
823
  - lib/alchemy/mount_point.rb
822
824
  - lib/alchemy/name_conversions.rb
@@ -959,6 +961,7 @@ files:
959
961
  - spec/features/admin/language_tree_feature_spec.rb
960
962
  - spec/features/admin/legacy_page_url_management_spec.rb
961
963
  - spec/features/admin/link_overlay_spec.rb
964
+ - spec/features/admin/locale_select_feature_spec.rb
962
965
  - spec/features/admin/modules_integration_spec.rb
963
966
  - spec/features/admin/page_creation_feature_spec.rb
964
967
  - spec/features/admin/page_editing_feature_spec.rb
@@ -1001,6 +1004,7 @@ files:
1001
1004
  - spec/libraries/auth_accessors_spec.rb
1002
1005
  - spec/libraries/config_spec.rb
1003
1006
  - spec/libraries/controller_actions_spec.rb
1007
+ - spec/libraries/i18n_spec.rb
1004
1008
  - spec/libraries/kaminari/scoped_pagination_url_helper_spec.rb
1005
1009
  - spec/libraries/modules_spec.rb
1006
1010
  - spec/libraries/mount_point_spec.rb
@@ -1015,7 +1019,6 @@ files:
1015
1019
  - spec/mailers/messages_spec.rb
1016
1020
  - spec/models/attachment_spec.rb
1017
1021
  - spec/models/cell_spec.rb
1018
- - spec/models/clipboard_spec.rb
1019
1022
  - spec/models/content_spec.rb
1020
1023
  - spec/models/element_spec.rb
1021
1024
  - spec/models/essence_boolean_spec.rb
@@ -1038,7 +1041,6 @@ files:
1038
1041
  - spec/spec_helper.rb
1039
1042
  - spec/support/ci/install_phantomjs
1040
1043
  - spec/support/hint_examples.rb
1041
- - spec/support/phantomjs_mavericks_fix.rb
1042
1044
  - spec/support/test_tweaks.rb
1043
1045
  - spec/tasks/helpers_spec.rb
1044
1046
  - spec/views/essences/essence_boolean_view_spec.rb
@@ -1199,6 +1201,7 @@ test_files:
1199
1201
  - spec/features/admin/language_tree_feature_spec.rb
1200
1202
  - spec/features/admin/legacy_page_url_management_spec.rb
1201
1203
  - spec/features/admin/link_overlay_spec.rb
1204
+ - spec/features/admin/locale_select_feature_spec.rb
1202
1205
  - spec/features/admin/modules_integration_spec.rb
1203
1206
  - spec/features/admin/page_creation_feature_spec.rb
1204
1207
  - spec/features/admin/page_editing_feature_spec.rb
@@ -1241,6 +1244,7 @@ test_files:
1241
1244
  - spec/libraries/auth_accessors_spec.rb
1242
1245
  - spec/libraries/config_spec.rb
1243
1246
  - spec/libraries/controller_actions_spec.rb
1247
+ - spec/libraries/i18n_spec.rb
1244
1248
  - spec/libraries/kaminari/scoped_pagination_url_helper_spec.rb
1245
1249
  - spec/libraries/modules_spec.rb
1246
1250
  - spec/libraries/mount_point_spec.rb
@@ -1255,7 +1259,6 @@ test_files:
1255
1259
  - spec/mailers/messages_spec.rb
1256
1260
  - spec/models/attachment_spec.rb
1257
1261
  - spec/models/cell_spec.rb
1258
- - spec/models/clipboard_spec.rb
1259
1262
  - spec/models/content_spec.rb
1260
1263
  - spec/models/element_spec.rb
1261
1264
  - spec/models/essence_boolean_spec.rb
@@ -1278,7 +1281,6 @@ test_files:
1278
1281
  - spec/spec_helper.rb
1279
1282
  - spec/support/ci/install_phantomjs
1280
1283
  - spec/support/hint_examples.rb
1281
- - spec/support/phantomjs_mavericks_fix.rb
1282
1284
  - spec/support/test_tweaks.rb
1283
1285
  - spec/tasks/helpers_spec.rb
1284
1286
  - spec/views/essences/essence_boolean_view_spec.rb