alchemy_cms 3.0.0.rc7 → 3.0.0.rc8

Sign up to get free protection for your applications and to get access to all the features.
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