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.
- checksums.yaml +4 -4
- data/Gemfile +2 -1
- data/README.md +1 -1
- data/app/assets/javascripts/alchemy/alchemy.dragndrop.js.coffee +0 -2
- data/app/assets/javascripts/alchemy/alchemy.element_editors.js.coffee +1 -1
- data/app/assets/javascripts/alchemy/alchemy.elements_window.js.coffee +26 -2
- data/app/assets/javascripts/alchemy/alchemy.preview_window.js.coffee +1 -1
- data/app/assets/javascripts/alchemy/alchemy.translations.js.coffee +22 -0
- data/app/assets/stylesheets/alchemy/base.scss +1 -5
- data/app/assets/stylesheets/alchemy/elements.scss +11 -61
- data/app/assets/stylesheets/alchemy/frame.scss +1 -1
- data/app/assets/stylesheets/tinymce/skins/alchemy/skin.min.css.scss +1 -1
- data/app/controllers/alchemy/admin/attachments_controller.rb +1 -1
- data/app/controllers/alchemy/admin/base_controller.rb +7 -13
- data/app/controllers/alchemy/admin/clipboard_controller.rb +15 -10
- data/app/controllers/alchemy/admin/elements_controller.rb +15 -11
- data/app/controllers/alchemy/admin/essence_pictures_controller.rb +8 -1
- data/app/controllers/alchemy/admin/pages_controller.rb +95 -22
- data/app/controllers/alchemy/admin/tags_controller.rb +1 -1
- data/app/controllers/alchemy/pictures_controller.rb +33 -32
- data/app/helpers/alchemy/admin/base_helper.rb +3 -16
- data/app/models/alchemy/element.rb +1 -1
- data/app/models/alchemy/page/page_naming.rb +4 -2
- data/app/models/alchemy/page/page_natures.rb +1 -1
- data/app/models/alchemy/page.rb +20 -1
- data/app/models/alchemy/picture.rb +1 -0
- data/app/models/alchemy/tree_node.rb +4 -0
- data/app/views/alchemy/admin/contents/destroy.js.erb +4 -0
- data/app/views/alchemy/admin/dashboard/index.html.erb +1 -1
- data/app/views/alchemy/admin/elements/_element.html.erb +11 -12
- data/app/views/alchemy/admin/elements/_new_element_form.html.erb +0 -3
- data/app/views/alchemy/admin/elements/create.js.erb +3 -3
- data/app/views/alchemy/admin/elements/index.html.erb +4 -19
- data/app/views/alchemy/admin/elements/new.html.erb +0 -3
- data/app/views/alchemy/admin/elements/trash.js.erb +12 -16
- data/app/views/alchemy/admin/pages/_page.html.erb +1 -1
- data/app/views/alchemy/admin/pages/edit.html.erb +36 -30
- data/app/views/alchemy/admin/pictures/edit_multiple.html.erb +1 -1
- data/app/views/alchemy/admin/trash/clear.js.erb +4 -0
- data/config/locales/alchemy.de.yml +56 -84
- data/config/locales/alchemy.en.yml +326 -105
- data/config/locales/alchemy.fr.yml +942 -0
- data/config/locales/alchemy.nl.yml +111 -137
- data/config/locales/simple_form.fr.yml +26 -0
- data/lib/alchemy/engine.rb +7 -1
- data/lib/alchemy/i18n.rb +7 -1
- data/lib/alchemy/middleware/rescue_old_cookies.rb +27 -0
- data/lib/alchemy/permissions.rb +1 -1
- data/lib/alchemy/version.rb +1 -1
- data/spec/controllers/admin/clipboard_controller_spec.rb +16 -19
- data/spec/controllers/admin/elements_controller_spec.rb +20 -23
- data/spec/controllers/admin/essence_pictures_controller_spec.rb +22 -6
- data/spec/controllers/admin/pages_controller_spec.rb +94 -5
- data/spec/controllers/pictures_controller_spec.rb +44 -3
- data/spec/features/admin/link_overlay_spec.rb +1 -0
- data/spec/features/admin/locale_select_feature_spec.rb +22 -0
- data/spec/libraries/i18n_spec.rb +30 -0
- data/spec/libraries/permissions_spec.rb +1 -1
- data/spec/models/element_spec.rb +5 -4
- data/spec/models/page_spec.rb +137 -8
- data/spec/spec_helper.rb +23 -19
- data/vendor/assets/javascripts/jquery_plugins/jquery.ui.nestedSortable.js +9 -3
- metadata +12 -10
- data/app/models/alchemy/clipboard.rb +0 -74
- data/app/views/alchemy/admin/contents/destroy.js.coffee +0 -4
- data/app/views/alchemy/admin/elements/_add_element_button.html.erb +0 -18
- data/app/views/alchemy/admin/trash/clear.js.coffee +0 -4
- data/spec/models/clipboard_spec.rb +0 -111
- 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
|
-
|
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
|
data/spec/models/element_spec.rb
CHANGED
@@ -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)
|
126
|
-
let(:clipboard) { [{id
|
127
|
-
|
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)
|
data/spec/models/page_spec.rb
CHANGED
@@ -106,9 +106,20 @@ module Alchemy
|
|
106
106
|
expect(external_page).to be_valid
|
107
107
|
end
|
108
108
|
|
109
|
-
|
110
|
-
|
111
|
-
|
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
|
-
{
|
317
|
-
{
|
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
|
-
{
|
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
|
-
{
|
339
|
-
{
|
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 =
|
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
|
-
|
63
|
+
DatabaseCleaner.clean_with(:truncation)
|
77
64
|
Alchemy::Seeder.seed!
|
78
65
|
end
|
79
|
-
|
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.
|
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-
|
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.
|
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.
|
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
|