flms 0.0.1 → 0.0.2
Sign up to get free protection for your applications and to get access to all the features.
- data/README.md +2 -2
- data/app/assets/javascripts/flms/{flms.js → admin.js} +1 -0
- data/app/assets/javascripts/flms/blocks/index/block.coffee +28 -0
- data/app/assets/javascripts/flms/blocks/index/block_list.coffee +20 -0
- data/app/assets/javascripts/flms/blocks/index/index.coffee +42 -0
- data/app/assets/stylesheets/flms/{flms.css → admin.css} +0 -0
- data/app/assets/stylesheets/flms/blocks/index.sass +4 -0
- data/app/assets/stylesheets/flms/blocks/show.sass +5 -0
- data/app/assets/stylesheets/flms/login.sass +30 -24
- data/app/controllers/flms/blocks_controller.rb +24 -12
- data/app/controllers/flms/layers_controller.rb +73 -0
- data/app/models/flms/block.rb +2 -1
- data/app/models/flms/blocks_page.rb +1 -1
- data/app/models/flms/layer.rb +7 -0
- data/app/models/flms/page.rb +12 -1
- data/app/views/flms/blocks/index.html.haml +14 -6
- data/app/views/flms/blocks/show.html.haml +35 -1
- data/app/views/flms/layers/_form.html.haml +23 -0
- data/app/views/flms/layers/edit.html.haml +2 -0
- data/app/views/flms/layers/new.html.haml +2 -0
- data/app/views/layouts/flms/admin.html.haml +2 -2
- data/app/views/layouts/flms/admin_login.html.haml +2 -2
- data/config/routes.rb +4 -1
- data/db/migrate/20130302011705_create_flms_blocks.rb +0 -1
- data/db/migrate/20130302015459_create_flms_blocks_pages.rb +2 -0
- data/db/migrate/20130312220011_create_flms_layers.rb +12 -0
- data/lib/flms/version.rb +1 -1
- data/spec/controllers/blocks_controller_spec.rb +38 -6
- data/spec/controllers/dashboard_controller_spec.rb +1 -1
- data/spec/controllers/pages_controller_spec.rb +1 -1
- data/spec/controllers/users_controller_spec.rb +1 -1
- data/spec/dummy/config/database.yml +44 -47
- data/spec/dummy/db/development.sqlite3 +0 -0
- data/spec/dummy/db/production.sqlite3 +0 -0
- data/spec/dummy/db/schema.rb +13 -2
- data/spec/dummy/db/test.sqlite3 +0 -0
- data/spec/dummy/log/development.log +43323 -0
- data/spec/dummy/log/production.log +16 -0
- data/spec/dummy/log/test.log +63567 -0
- data/spec/dummy/tmp/cache/assets/{D74/EA0/sprockets%2Fccfc557971c4d47336cab75db207b89a → C4C/010/sprockets%2F74558ebf3d0666286090250c04b945a1} +0 -0
- data/spec/dummy/tmp/cache/assets/{DA0/9F0/sprockets%2Fd7c0d94bf0df6b0e03f83dcaf8873631 → C84/200/sprockets%2F6d5671bc22b630f45761e90488b3a909} +0 -0
- data/spec/dummy/tmp/cache/assets/C8A/F50/sprockets%2F604b0fb8ee1c08f9036750897c890831 +0 -0
- data/spec/dummy/tmp/cache/assets/CA9/AC0/sprockets%2F2f3e0ad16e81532007e094c081594f7e +0 -0
- data/spec/dummy/tmp/cache/assets/CAB/C80/sprockets%2Fc4e739111d82c7189113aeb228816ba8 +0 -0
- data/spec/dummy/tmp/cache/assets/CBC/250/sprockets%2F1b2102711103acac21fe74936046ddb4 +0 -0
- data/spec/dummy/tmp/cache/assets/CCF/210/sprockets%2F43b5c2ffc8a62726b4ed6234001571a4 +0 -0
- data/spec/dummy/tmp/cache/assets/CD0/D40/sprockets%2F7e3d7254f3137e2108220770b3dd1bfc +0 -0
- data/spec/dummy/tmp/cache/assets/CD1/8F0/sprockets%2F4032f7a5b2133a8b8f963e12fd6120c5 +0 -0
- data/spec/dummy/tmp/cache/assets/CD9/360/sprockets%2F057bf14a58d60283276e83db123f4fa3 +0 -0
- data/spec/dummy/tmp/cache/assets/CD9/AA0/sprockets%2F80c500e462b3e91b00f48609b56ff91b +0 -0
- data/spec/dummy/tmp/cache/assets/CDB/510/sprockets%2Fd61745a24c4636f8813fa14038bac69a +0 -0
- data/spec/dummy/tmp/cache/assets/D06/AF0/sprockets%2F02a9a4f214368781ba86ed42d5bef203 +0 -0
- data/spec/dummy/tmp/cache/assets/D09/5C0/sprockets%2F7cd3521c63623eb6f02dbb514991a6f6 +0 -0
- data/spec/dummy/tmp/cache/assets/D0C/570/sprockets%2F7e3d63e1412ae56b44b23d95547f0cc7 +0 -0
- data/spec/dummy/tmp/cache/assets/D17/6B0/sprockets%2F43a81531e358ce9bb7af8417c875d63a +0 -0
- data/spec/dummy/tmp/cache/assets/D18/9C0/sprockets%2Ff92d239ff629c160ee015e3845a6c9c3 +0 -0
- data/spec/dummy/tmp/cache/assets/{DE6/B10/sprockets%2Fa0adf3fb2b0054d04dd44c08aff1d6c8 → D19/060/sprockets%2F4be3ef7d038e55cffc27166271638f60} +0 -0
- data/spec/dummy/tmp/cache/assets/D1A/3F0/sprockets%2F84181c4b293f3a1c4efe9226652f9e6e +0 -0
- data/spec/dummy/tmp/cache/assets/D1E/190/sprockets%2Ff4d68b867965b6cb8d21aea19a053993 +0 -0
- data/spec/dummy/tmp/cache/assets/D20/050/sprockets%2F9a286a605e66598f88191e2aa6bd72dd +0 -0
- data/spec/dummy/tmp/cache/assets/D2E/130/sprockets%2F5ebb788f274dd034257c0bc0400fae50 +0 -0
- data/spec/dummy/tmp/cache/assets/D2E/F10/sprockets%2F156bfd6b405a129f5f003243cf60aea9 +0 -0
- data/spec/dummy/tmp/cache/assets/D30/FA0/sprockets%2Fb9d61dc7d19024512c0bdb72391d9bb2 +0 -0
- data/spec/dummy/tmp/cache/assets/D3B/440/sprockets%2Fabe31f236167ba051f6ff849d0a7282f +0 -0
- data/spec/dummy/tmp/cache/assets/D3B/550/sprockets%2Fb61caf9834ac8c31691851ac024f26ef +0 -0
- data/spec/dummy/tmp/cache/assets/D44/A50/sprockets%2F7602cd388554ba54eb914c1b2d7ff68c +0 -0
- data/spec/dummy/tmp/cache/assets/D45/CC0/sprockets%2F741e31abcfe889c718bfa7ee58080305 +0 -0
- data/spec/dummy/tmp/cache/assets/D46/210/sprockets%2F45a8d49c8edbaf91f38ab1495430384c +0 -0
- data/spec/dummy/tmp/cache/assets/D4E/1B0/sprockets%2Ff7cbd26ba1d28d48de824f0e94586655 +0 -0
- data/spec/dummy/tmp/cache/assets/D50/0B0/sprockets%2F6c3a019b7442761786cc7bef8e8e7c6c +0 -0
- data/spec/dummy/tmp/cache/assets/D53/F80/sprockets%2F11d791b713f9b9cf2bb85bd7f6589b84 +0 -0
- data/spec/dummy/tmp/cache/assets/D54/DE0/sprockets%2F77af3e306bb966f71f83e90e2a8868db +0 -0
- data/spec/dummy/tmp/cache/assets/D5B/1F0/sprockets%2F4d98e747aa4bb9fc8859f49a45159e1c +0 -0
- data/spec/dummy/tmp/cache/assets/{CDE/D90/sprockets%2Fcc733e310d9646637216c4ffe109ea35 → D64/D10/sprockets%2F9857068018fbac51ecd0a7510bcca55e} +0 -0
- data/spec/dummy/tmp/cache/assets/{DFD/540/sprockets%2F181ef7a7c275dd2872aa1ed1fcfab75f → D66/8E0/sprockets%2F0cbda18dbb9e414ed0bf1199358e1742} +0 -0
- data/spec/dummy/tmp/cache/assets/{D35/470/sprockets%2F2c0a647ea89470a8285b9acb2006dbd5 → D67/480/sprockets%2Fd7dc8cc56f98d1314c3d2ca9c422c104} +0 -0
- data/spec/dummy/tmp/cache/assets/D6E/870/sprockets%2F3f77e0b5396013fd145a6fdd21bc9b7f +0 -0
- data/spec/dummy/tmp/cache/assets/{CB9/E30/sprockets%2F588cf5763c29e490d026f24e8aa90343 → D71/2D0/sprockets%2F958685af3478f12a33ffaa5cfa26e0d1} +0 -0
- data/spec/dummy/tmp/cache/assets/D77/D80/sprockets%2F7ad794c63274a9812dfbabc1dae69692 +0 -0
- data/spec/dummy/tmp/cache/assets/D79/DE0/sprockets%2F9e7131d002f39be972e9918bdfbbcc66 +0 -0
- data/spec/dummy/tmp/cache/assets/D7C/3A0/sprockets%2Fec63717067efd6b2daf3423edf70f689 +0 -0
- data/spec/dummy/tmp/cache/assets/D81/400/sprockets%2F566656e2cc9e698b1dbbd56d6e2e6b36 +0 -0
- data/spec/dummy/tmp/cache/assets/D91/320/sprockets%2F322e2344c1fc1234ffd9b3142eecaf6f +0 -0
- data/spec/dummy/tmp/cache/assets/D93/0C0/sprockets%2Fab900c084c9c51c312ee3457cee8cdc2 +0 -0
- data/spec/dummy/tmp/cache/assets/D93/3F0/sprockets%2Fb6aecc2fe36010208fc8c4cc9e04672c +0 -0
- data/spec/dummy/tmp/cache/assets/D97/1B0/sprockets%2Fe0ae6a22a963d0e0819ce6436eb57cae +0 -0
- data/spec/dummy/tmp/cache/assets/D98/FD0/sprockets%2F6f253bd2bf824ac38c69bfe1418a04be +0 -0
- data/spec/dummy/tmp/cache/assets/D99/CF0/sprockets%2F015b5a48fa7906d045fc23db8a60feef +0 -0
- data/spec/dummy/tmp/cache/assets/{DD5/440/sprockets%2F9b3488ba6d62c3dcc809f8cd3dc2d1f5 → DA2/330/sprockets%2F27697dddd23a0913339ccb95dabd7ae7} +0 -0
- data/spec/dummy/tmp/cache/assets/DA3/920/sprockets%2F6c45b9f8e0152c78b3c9be1c2e8be53c +0 -0
- data/spec/dummy/tmp/cache/assets/DA5/BC0/sprockets%2F5b86068a872e5bd841750d6cbd2dfdbf +0 -0
- data/spec/dummy/tmp/cache/assets/DA8/4A0/sprockets%2Ff8ba39d58ace11df624bf7e24c7b5882 +0 -0
- data/spec/dummy/tmp/cache/assets/DA8/C30/sprockets%2Fb7d14d588a70a56d7ddac542eef557d6 +0 -0
- data/spec/dummy/tmp/cache/assets/DA9/370/sprockets%2Fdf257d496b11ea9c1bb7ee139d68c83e +0 -0
- data/spec/dummy/tmp/cache/assets/DAC/D80/sprockets%2Fb8ca14c15e0301b935aaaef327bdc40a +0 -0
- data/spec/dummy/tmp/cache/assets/DB6/C30/sprockets%2F377ff9998fde36fcace7c7419ba8b301 +0 -0
- data/spec/dummy/tmp/cache/assets/DB8/C30/sprockets%2Fca860af2d10e0c745b6e38b12dabe05f +0 -0
- data/spec/dummy/tmp/cache/assets/DBF/630/sprockets%2F8423ad7ae72b0bc6baeac10405389fdf +0 -0
- data/spec/dummy/tmp/cache/assets/DC1/530/sprockets%2F4db0b289eee7dad03453a5924c20dcfa +0 -0
- data/spec/dummy/tmp/cache/assets/DC6/7D0/sprockets%2Ff7689ac5fafbf683c537892e6ff7f8c3 +0 -0
- data/spec/dummy/tmp/cache/assets/DCC/B80/sprockets%2Fb7ae6e7bfa8984c54a4dfaf0011617cd +0 -0
- data/spec/dummy/tmp/cache/assets/DCF/0B0/sprockets%2F23db7ab96a5549546bbdd0bc2e6ea86f +0 -0
- data/spec/dummy/tmp/cache/assets/DD4/990/sprockets%2F8dc6b77dc74dfdf830aa8f19b92c130d +0 -0
- data/spec/dummy/tmp/cache/assets/DF1/A10/sprockets%2Fa925a815ca0bff4d6f42fbdf0d323a4f +0 -0
- data/spec/dummy/tmp/cache/assets/DF3/820/sprockets%2Fede955e751bbec440cbbfc00473c34ec +0 -0
- data/spec/dummy/tmp/cache/assets/E04/890/sprockets%2F2f5173deea6c795b8fdde723bb4b63af +0 -0
- data/spec/dummy/tmp/cache/assets/E3A/110/sprockets%2Fb6d5158ff7ac6d2ca99bfe56a7ddd2e3 +0 -0
- data/spec/dummy/tmp/cache/assets/E4B/EE0/sprockets%2F06c4dea4fc3cb561b87bd078aab0facc +0 -0
- data/spec/dummy/tmp/cache/assets/E6D/8B0/sprockets%2F9edfdf7e85cdd1a69b0eb14c6ce8ed19 +0 -0
- data/spec/dummy/tmp/public/uploads/flms/image_layer/image/5/300px-BabySinclair.jpg +0 -0
- data/spec/dummy/tmp/uploads/flms/image_layer/image/4/300px-BabySinclair.jpg +0 -0
- data/spec/factories/blocks.rb +0 -1
- data/spec/factories/layer.rb +5 -0
- data/spec/features/blocks/activating_blocks_spec.rb +18 -0
- data/spec/features/blocks/create_spec.rb +1 -2
- data/spec/features/blocks/delete_spec.rb +2 -2
- data/spec/features/blocks/edit_spec.rb +2 -2
- data/spec/features/blocks/show_spec.rb +3 -3
- data/spec/features/dashboard_spec.rb +1 -1
- data/spec/features/layers/create_spec.rb +22 -0
- data/spec/features/layers/index_spec.rb +13 -0
- data/spec/features/layers/update_spec.rb +23 -0
- data/spec/features/login_spec.rb +1 -1
- data/spec/features/pages/create_spec.rb +1 -1
- data/spec/features/pages/delete_spec.rb +1 -1
- data/spec/features/pages/index_spec.rb +1 -1
- data/spec/features/pages/update_spec.rb +1 -1
- data/spec/features/users/create_spec.rb +1 -1
- data/spec/features/users/delete_spec.rb +1 -1
- data/spec/features/users/index_spec.rb +1 -1
- data/spec/models/block_spec.rb +4 -4
- data/spec/models/page_spec.rb +29 -5
- data/spec/support/lets.rb +19 -6
- metadata +139 -56
- data/app/assets/javascripts/flms/blocks/index.coffee +0 -6
- data/spec/dummy/tmp/cache/assets/C9D/180/sprockets%2Fad74b633d2447502477133032afac84b +0 -0
- data/spec/dummy/tmp/cache/assets/CE4/6B0/sprockets%2F6e38aec803936176be248f507eb3432d +0 -0
- data/spec/dummy/tmp/cache/assets/CED/6A0/sprockets%2Fcc221f5201d658cf456836f8b5547f9d +0 -0
- data/spec/dummy/tmp/cache/assets/CF6/740/sprockets%2F0cb88349ae46593e396c4bd68854ed08 +0 -0
- data/spec/dummy/tmp/cache/assets/D01/E80/sprockets%2Fc1a3694915166d6a041afa4bb062fd84 +0 -0
- data/spec/dummy/tmp/cache/assets/D07/250/sprockets%2Fa8bf27de087b582dc454910a060e0b84 +0 -0
- data/spec/dummy/tmp/cache/assets/D0D/510/sprockets%2Fa189f1a8718ff11152feb3c43c75b841 +0 -0
- data/spec/dummy/tmp/cache/assets/D1E/1D0/sprockets%2Ffeec495723d877b92c74db2055516bc9 +0 -0
- data/spec/dummy/tmp/cache/assets/D4A/B40/sprockets%2F509d2dc1350975d781c50dffc58ef53f +0 -0
- data/spec/dummy/tmp/cache/assets/D65/690/sprockets%2F511f71e32f87da06df67250bb39abdc2 +0 -0
- data/spec/dummy/tmp/cache/assets/D81/300/sprockets%2F9543b0420abb11b0a126a8384edddafe +0 -0
- data/spec/dummy/tmp/cache/assets/D9E/220/sprockets%2Fd129fcf804e89814c2f4abbe0336cba9 +0 -0
- data/spec/dummy/tmp/cache/assets/DAE/F10/sprockets%2F46950fdbeed95ba83ca8e7215194ddf8 +0 -0
- data/spec/dummy/tmp/cache/assets/DB2/1F0/sprockets%2F9fe57997f92efbee3b03df4510a2df57 +0 -0
- data/spec/dummy/tmp/cache/assets/DCE/790/sprockets%2Fff77d67febbb3af024f721c0bb4c4749 +0 -0
- data/spec/dummy/tmp/cache/assets/DFA/FF0/sprockets%2F75699fed9ddaecd89464492eeeef90d8 +0 -0
- data/spec/dummy/tmp/cache/assets/E0E/B50/sprockets%2Fe78fa5fc4cfb0979876d23ae1b1f3ffd +0 -0
data/README.md
CHANGED
@@ -1,3 +1,3 @@
|
|
1
|
-
= Flms
|
1
|
+
= Flms [![Build Status](https://travis-ci.org/Originate-Inc/flms.png?branch=travis)](https://travis-ci.org/Originate-Inc/flms) [![Code Climate](https://codeclimate.com/github/Originate-Inc/flms.png)](https://codeclimate.com/github/Originate-Inc/flms)
|
2
2
|
|
3
|
-
This project rocks and uses MIT-LICENSE.
|
3
|
+
This project rocks and uses MIT-LICENSE.
|
@@ -0,0 +1,28 @@
|
|
1
|
+
# A single block on the blocks index page.
|
2
|
+
class @Block extends modularity.Module
|
3
|
+
|
4
|
+
constructor: ->
|
5
|
+
super
|
6
|
+
|
7
|
+
# The 'active' switch.
|
8
|
+
@active_switch = @$('.switch')
|
9
|
+
|
10
|
+
|
11
|
+
# Returns the id of this block.
|
12
|
+
id: ->
|
13
|
+
@container.data('block-id')
|
14
|
+
|
15
|
+
|
16
|
+
# Returns whether this block is activated.
|
17
|
+
active: ->
|
18
|
+
@active_switch.bootstrapSwitch('status')
|
19
|
+
|
20
|
+
|
21
|
+
# Returns the data for this block.
|
22
|
+
get_data: ->
|
23
|
+
{
|
24
|
+
id: @id(),
|
25
|
+
active: @active()
|
26
|
+
}
|
27
|
+
|
28
|
+
|
@@ -0,0 +1,20 @@
|
|
1
|
+
# The list of blocks on a page.
|
2
|
+
class @BlockList extends modularity.Module
|
3
|
+
|
4
|
+
constructor: ->
|
5
|
+
super
|
6
|
+
|
7
|
+
# Make block list sortable.
|
8
|
+
$('.block_list').sortable(stop: @sorting_finished)
|
9
|
+
$('.block_list').disableSelection()
|
10
|
+
|
11
|
+
|
12
|
+
# Returns the data of the blocks.
|
13
|
+
get_data: ->
|
14
|
+
for tr in @$('tr')
|
15
|
+
new Block($(tr)).get_data()
|
16
|
+
|
17
|
+
|
18
|
+
# Called when the sorting is done.
|
19
|
+
sorting_finished: =>
|
20
|
+
@fire 'sorting_finished'
|
@@ -0,0 +1,42 @@
|
|
1
|
+
# Page controller for the 'index' page for blocks.
|
2
|
+
class @BlocksIndexPage extends modularity.Module
|
3
|
+
|
4
|
+
constructor: ->
|
5
|
+
super 'body'
|
6
|
+
|
7
|
+
# The list of blocks.
|
8
|
+
@block_list = new BlockList @$('.block_list')
|
9
|
+
@block_list.on 'sorting_finished', @sorting_finished
|
10
|
+
|
11
|
+
# The 'save' button.
|
12
|
+
@save_button = @$('#save')
|
13
|
+
@save_button.click @save_button_clicked
|
14
|
+
|
15
|
+
@$('.switch').on 'switch-change', @active_switch_changed
|
16
|
+
|
17
|
+
|
18
|
+
# Called when the 'active' checkbox of a block is changed.
|
19
|
+
active_switch_changed: =>
|
20
|
+
@save_button.fadeIn()
|
21
|
+
|
22
|
+
|
23
|
+
# Called when the 'save' button is clicked.
|
24
|
+
save_button_clicked: =>
|
25
|
+
@save_changes_to_server()
|
26
|
+
|
27
|
+
|
28
|
+
# Save the changes to the server.
|
29
|
+
save_changes_to_server: ->
|
30
|
+
$.ajax
|
31
|
+
url: document.url
|
32
|
+
method: 'PUT'
|
33
|
+
contentType: 'application/json'
|
34
|
+
data: JSON.stringify({block_data: @block_list.get_data()})
|
35
|
+
success: =>
|
36
|
+
@save_button.fadeOut()
|
37
|
+
|
38
|
+
|
39
|
+
# Called when the user has changed the sorting of the blocks.
|
40
|
+
sorting_finished: =>
|
41
|
+
@save_button.fadeIn()
|
42
|
+
|
File without changes
|
@@ -1,32 +1,38 @@
|
|
1
|
-
body.
|
1
|
+
body.sessions.new,
|
2
|
+
body.sessions.create,
|
2
3
|
body.user_passwords.new
|
3
4
|
background-color: #f5f5f5
|
4
5
|
|
5
|
-
.login
|
6
|
+
.login
|
6
7
|
|
7
|
-
|
8
|
+
padding-top: 20px
|
8
9
|
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
10
|
+
.form-signin
|
11
|
+
max-width: 300px
|
12
|
+
padding: 19px 29px 29px
|
13
|
+
margin: 0 auto 20px
|
14
|
+
background-color: #fff
|
15
|
+
border: 1px solid #e5e5e5
|
16
|
+
-webkit-border-radius: 5px
|
17
|
+
-moz-border-radius: 5px
|
18
|
+
border-radius: 5px
|
19
|
+
-webkit-box-shadow: 0 1px 2px rgba(0,0,0,.05)
|
20
|
+
-moz-box-shadow: 0 1px 2px rgba(0,0,0,.05)
|
21
|
+
box-shadow: 0 1px 2px rgba(0,0,0,.05)
|
21
22
|
|
22
|
-
|
23
|
-
|
23
|
+
.form-signin-heading, .checkbox
|
24
|
+
margin-bottom: 10px
|
24
25
|
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
26
|
+
input[type="text"],
|
27
|
+
input[type="password"],
|
28
|
+
input[type="email"]
|
29
|
+
font-size: 16px
|
30
|
+
height: auto
|
31
|
+
margin-bottom: 15px
|
32
|
+
padding: 7px 9px
|
32
33
|
|
34
|
+
.alert,
|
35
|
+
.notice
|
36
|
+
text-align: center
|
37
|
+
width: 500px
|
38
|
+
margin: 0 auto
|
@@ -2,30 +2,25 @@ require_dependency "flms/application_controller"
|
|
2
2
|
|
3
3
|
module Flms
|
4
4
|
class BlocksController < ApplicationController
|
5
|
-
before_filter :authenticate_user!
|
6
5
|
layout 'flms/admin'
|
6
|
+
before_filter :authenticate_user!
|
7
|
+
before_filter :load_page
|
8
|
+
before_filter :load_block, only: [:show, :edit, :update, :delete]
|
7
9
|
|
8
10
|
def index
|
9
|
-
@page = Flms::Page.find_by_url params[:page_id]
|
10
|
-
@blocks = @page.blocks
|
11
11
|
end
|
12
12
|
|
13
13
|
def show
|
14
|
-
@block = Block.find(params[:id])
|
15
14
|
end
|
16
15
|
|
17
16
|
def new
|
18
|
-
@page = Page.find_by_url params[:page_id]
|
19
17
|
@block = Block.new
|
20
18
|
end
|
21
19
|
|
22
20
|
def edit
|
23
|
-
@page = Page.find_by_url params[:page_id]
|
24
|
-
@block = Block.find(params[:id])
|
25
21
|
end
|
26
22
|
|
27
23
|
def create
|
28
|
-
@page = Page.find_by_url params[:page_id]
|
29
24
|
@block = Block.new(params[:block])
|
30
25
|
if @block.save
|
31
26
|
@block.pages << @page
|
@@ -36,8 +31,6 @@ module Flms
|
|
36
31
|
end
|
37
32
|
|
38
33
|
def update
|
39
|
-
@page = Page.find_by_url params[:page_id]
|
40
|
-
@block = Block.find(params[:id])
|
41
34
|
if @block.update_attributes(params[:block])
|
42
35
|
redirect_to [@page, :blocks], notice: 'Block was successfully updated.'
|
43
36
|
else
|
@@ -45,11 +38,30 @@ module Flms
|
|
45
38
|
end
|
46
39
|
end
|
47
40
|
|
41
|
+
def update_all
|
42
|
+
params[:block_data].each_with_index do |block_data, pos|
|
43
|
+
position = @page.position_for_block block_data[:id].to_i
|
44
|
+
position.active = block_data[:active]
|
45
|
+
position.ordering = pos
|
46
|
+
position.save!
|
47
|
+
end
|
48
|
+
render text: ''
|
49
|
+
end
|
50
|
+
|
48
51
|
def destroy
|
49
|
-
@page = Page.find_by_url params[:page_id]
|
50
|
-
@block = Block.find params[:id]
|
51
52
|
@block.destroy
|
52
53
|
redirect_to page_blocks_path(@page), notice: 'Block deleted'
|
53
54
|
end
|
55
|
+
|
56
|
+
|
57
|
+
private
|
58
|
+
|
59
|
+
def load_page
|
60
|
+
@page = Page.find_by_url params[:page_id]
|
61
|
+
end
|
62
|
+
|
63
|
+
def load_block
|
64
|
+
@block = Block.find params[:id]
|
65
|
+
end
|
54
66
|
end
|
55
67
|
end
|
@@ -0,0 +1,73 @@
|
|
1
|
+
require_dependency "flms/application_controller"
|
2
|
+
|
3
|
+
module Flms
|
4
|
+
class LayersController < ApplicationController
|
5
|
+
layout 'flms/admin'
|
6
|
+
before_filter :authenticate_user!
|
7
|
+
before_filter :load_page
|
8
|
+
before_filter :load_block
|
9
|
+
before_filter :load_layer, only: [:show, :edit, :update, :delete]
|
10
|
+
|
11
|
+
def index
|
12
|
+
end
|
13
|
+
|
14
|
+
def show
|
15
|
+
end
|
16
|
+
|
17
|
+
def new
|
18
|
+
@layer = Layer.new
|
19
|
+
end
|
20
|
+
|
21
|
+
def edit
|
22
|
+
end
|
23
|
+
|
24
|
+
def create
|
25
|
+
@layer = Layer.new params[:layer]
|
26
|
+
@layer.block = @block
|
27
|
+
if @layer.save
|
28
|
+
redirect_to page_block_path(@page, @block), notice: 'Layer created'
|
29
|
+
else
|
30
|
+
render action: "new"
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
def update
|
35
|
+
if @layer.update_attributes(params[:layer])
|
36
|
+
redirect_to [@page, @block], notice: 'Layer updated'
|
37
|
+
else
|
38
|
+
render action: "edit"
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
def update_all
|
43
|
+
params[:layer_data].each_with_index do |layer_data, pos|
|
44
|
+
position = @page.position_for_layer layer_data[:id].to_i
|
45
|
+
position.active = layer_data[:active]
|
46
|
+
position.ordering = pos
|
47
|
+
position.save!
|
48
|
+
end
|
49
|
+
render text: ''
|
50
|
+
end
|
51
|
+
|
52
|
+
def destroy
|
53
|
+
@layer.destroy
|
54
|
+
redirect_to page_layers_path(@page), notice: 'Layer deleted'
|
55
|
+
end
|
56
|
+
|
57
|
+
|
58
|
+
private
|
59
|
+
|
60
|
+
def load_page
|
61
|
+
@page = Page.find_by_url params[:page_id]
|
62
|
+
end
|
63
|
+
|
64
|
+
def load_block
|
65
|
+
@block = Block.find params[:block_id]
|
66
|
+
end
|
67
|
+
|
68
|
+
def load_layer
|
69
|
+
@layer = Layer.find params[:id]
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
data/app/models/flms/block.rb
CHANGED
@@ -2,8 +2,9 @@ module Flms
|
|
2
2
|
class Block < ActiveRecord::Base
|
3
3
|
attr_accessible :active, :name
|
4
4
|
|
5
|
-
has_many :blocks_pages, class_name: 'Flms::BlocksPage'
|
5
|
+
has_many :blocks_pages, class_name: 'Flms::BlocksPage', dependent: :destroy
|
6
6
|
has_many :pages, through: :blocks_pages, class_name: 'Flms::Page'
|
7
|
+
has_many :layers
|
7
8
|
|
8
9
|
validates :name, presence: true
|
9
10
|
end
|
data/app/models/flms/page.rb
CHANGED
@@ -2,11 +2,22 @@ module Flms
|
|
2
2
|
class Page < ActiveRecord::Base
|
3
3
|
attr_accessible :title, :url
|
4
4
|
|
5
|
-
has_many :blocks_pages
|
5
|
+
has_many :blocks_pages, dependent: :destroy
|
6
6
|
has_many :blocks, through: :blocks_pages
|
7
7
|
|
8
8
|
validates :title, :url, presence: true
|
9
9
|
|
10
|
+
# Returns the blocks_pages of this page, in the right order to display them.
|
11
|
+
def ordered_blocks_pages
|
12
|
+
blocks_pages.order('ordering').includes(:block)
|
13
|
+
end
|
14
|
+
|
15
|
+
# Returns the BlocksPage object for the given block on this page.
|
16
|
+
def position_for_block block_id
|
17
|
+
blocks_pages.where(block_id: block_id).first
|
18
|
+
end
|
19
|
+
|
20
|
+
# For creating URLs.
|
10
21
|
def to_param
|
11
22
|
url
|
12
23
|
end
|
@@ -10,16 +10,22 @@
|
|
10
10
|
%table.table.table-striped.table-hover
|
11
11
|
%thead
|
12
12
|
%tr
|
13
|
+
%th Active
|
13
14
|
%th Name
|
14
|
-
%th
|
15
|
+
%th Actions
|
15
16
|
|
16
|
-
%tbody.
|
17
|
-
- @
|
18
|
-
|
17
|
+
%tbody.block_list
|
18
|
+
- @page.ordered_blocks_pages.each do |blocks_page|
|
19
|
+
- block = blocks_page.block
|
20
|
+
%tr.ui-state-default{'data-block-id' => block.id}
|
19
21
|
|
22
|
+
-# "Active" switch.
|
20
23
|
%td.action
|
21
24
|
.switch.switch-mini
|
22
|
-
|
25
|
+
- if blocks_page.active
|
26
|
+
%input{id: "active_#{block.id}", type: 'checkbox', checked: 'checked'}
|
27
|
+
- else
|
28
|
+
%input{id: "active_#{block.id}", type: 'checkbox'}
|
23
29
|
|
24
30
|
%td.name
|
25
31
|
= link_to block.name, page_block_path(@page, block)
|
@@ -38,4 +44,6 @@
|
|
38
44
|
%i.icon-plus.icon-white
|
39
45
|
New Block
|
40
46
|
|
41
|
-
|
47
|
+
%button#save.btn.btn-primary
|
48
|
+
%i.icon-hdd.icon-white
|
49
|
+
Save
|
@@ -1 +1,35 @@
|
|
1
|
-
|
1
|
+
|
2
|
+
|
3
|
+
|
4
|
+
%h4 Layers in block '#{@block.name}'
|
5
|
+
|
6
|
+
%table.table.table-striped.table-hover
|
7
|
+
%thead
|
8
|
+
%tr
|
9
|
+
%th Name
|
10
|
+
%th Actions
|
11
|
+
|
12
|
+
%tbody.layer_list
|
13
|
+
- @block.layers.each do |layer|
|
14
|
+
%tr.ui-state-default{'data-layer-id' => layer.id}
|
15
|
+
|
16
|
+
%td.name
|
17
|
+
= layer.name
|
18
|
+
|
19
|
+
%td.action
|
20
|
+
= link_to edit_page_block_layer_path(@page, @block, layer), class: 'btn', title: 'edit' do
|
21
|
+
%i.icon-pencil
|
22
|
+
|
23
|
+
%td.action
|
24
|
+
= link_to page_block_layer_path(@page, @block, layer), method: :delete, data: { confirm: 'Are you sure?' }, class: 'btn', title: 'delete' do
|
25
|
+
%i.icon-trash
|
26
|
+
|
27
|
+
%br
|
28
|
+
|
29
|
+
= link_to new_page_block_layer_path(@page, @block), class: 'btn btn-success' do
|
30
|
+
%i.icon-plus.icon-white
|
31
|
+
New Layer
|
32
|
+
|
33
|
+
%button#save.btn.btn-primary
|
34
|
+
%i.icon-hdd.icon-white
|
35
|
+
Save
|