flms 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (152) hide show
  1. data/README.md +2 -2
  2. data/app/assets/javascripts/flms/{flms.js → admin.js} +1 -0
  3. data/app/assets/javascripts/flms/blocks/index/block.coffee +28 -0
  4. data/app/assets/javascripts/flms/blocks/index/block_list.coffee +20 -0
  5. data/app/assets/javascripts/flms/blocks/index/index.coffee +42 -0
  6. data/app/assets/stylesheets/flms/{flms.css → admin.css} +0 -0
  7. data/app/assets/stylesheets/flms/blocks/index.sass +4 -0
  8. data/app/assets/stylesheets/flms/blocks/show.sass +5 -0
  9. data/app/assets/stylesheets/flms/login.sass +30 -24
  10. data/app/controllers/flms/blocks_controller.rb +24 -12
  11. data/app/controllers/flms/layers_controller.rb +73 -0
  12. data/app/models/flms/block.rb +2 -1
  13. data/app/models/flms/blocks_page.rb +1 -1
  14. data/app/models/flms/layer.rb +7 -0
  15. data/app/models/flms/page.rb +12 -1
  16. data/app/views/flms/blocks/index.html.haml +14 -6
  17. data/app/views/flms/blocks/show.html.haml +35 -1
  18. data/app/views/flms/layers/_form.html.haml +23 -0
  19. data/app/views/flms/layers/edit.html.haml +2 -0
  20. data/app/views/flms/layers/new.html.haml +2 -0
  21. data/app/views/layouts/flms/admin.html.haml +2 -2
  22. data/app/views/layouts/flms/admin_login.html.haml +2 -2
  23. data/config/routes.rb +4 -1
  24. data/db/migrate/20130302011705_create_flms_blocks.rb +0 -1
  25. data/db/migrate/20130302015459_create_flms_blocks_pages.rb +2 -0
  26. data/db/migrate/20130312220011_create_flms_layers.rb +12 -0
  27. data/lib/flms/version.rb +1 -1
  28. data/spec/controllers/blocks_controller_spec.rb +38 -6
  29. data/spec/controllers/dashboard_controller_spec.rb +1 -1
  30. data/spec/controllers/pages_controller_spec.rb +1 -1
  31. data/spec/controllers/users_controller_spec.rb +1 -1
  32. data/spec/dummy/config/database.yml +44 -47
  33. data/spec/dummy/db/development.sqlite3 +0 -0
  34. data/spec/dummy/db/production.sqlite3 +0 -0
  35. data/spec/dummy/db/schema.rb +13 -2
  36. data/spec/dummy/db/test.sqlite3 +0 -0
  37. data/spec/dummy/log/development.log +43323 -0
  38. data/spec/dummy/log/production.log +16 -0
  39. data/spec/dummy/log/test.log +63567 -0
  40. data/spec/dummy/tmp/cache/assets/{D74/EA0/sprockets%2Fccfc557971c4d47336cab75db207b89a → C4C/010/sprockets%2F74558ebf3d0666286090250c04b945a1} +0 -0
  41. data/spec/dummy/tmp/cache/assets/{DA0/9F0/sprockets%2Fd7c0d94bf0df6b0e03f83dcaf8873631 → C84/200/sprockets%2F6d5671bc22b630f45761e90488b3a909} +0 -0
  42. data/spec/dummy/tmp/cache/assets/C8A/F50/sprockets%2F604b0fb8ee1c08f9036750897c890831 +0 -0
  43. data/spec/dummy/tmp/cache/assets/CA9/AC0/sprockets%2F2f3e0ad16e81532007e094c081594f7e +0 -0
  44. data/spec/dummy/tmp/cache/assets/CAB/C80/sprockets%2Fc4e739111d82c7189113aeb228816ba8 +0 -0
  45. data/spec/dummy/tmp/cache/assets/CBC/250/sprockets%2F1b2102711103acac21fe74936046ddb4 +0 -0
  46. data/spec/dummy/tmp/cache/assets/CCF/210/sprockets%2F43b5c2ffc8a62726b4ed6234001571a4 +0 -0
  47. data/spec/dummy/tmp/cache/assets/CD0/D40/sprockets%2F7e3d7254f3137e2108220770b3dd1bfc +0 -0
  48. data/spec/dummy/tmp/cache/assets/CD1/8F0/sprockets%2F4032f7a5b2133a8b8f963e12fd6120c5 +0 -0
  49. data/spec/dummy/tmp/cache/assets/CD9/360/sprockets%2F057bf14a58d60283276e83db123f4fa3 +0 -0
  50. data/spec/dummy/tmp/cache/assets/CD9/AA0/sprockets%2F80c500e462b3e91b00f48609b56ff91b +0 -0
  51. data/spec/dummy/tmp/cache/assets/CDB/510/sprockets%2Fd61745a24c4636f8813fa14038bac69a +0 -0
  52. data/spec/dummy/tmp/cache/assets/D06/AF0/sprockets%2F02a9a4f214368781ba86ed42d5bef203 +0 -0
  53. data/spec/dummy/tmp/cache/assets/D09/5C0/sprockets%2F7cd3521c63623eb6f02dbb514991a6f6 +0 -0
  54. data/spec/dummy/tmp/cache/assets/D0C/570/sprockets%2F7e3d63e1412ae56b44b23d95547f0cc7 +0 -0
  55. data/spec/dummy/tmp/cache/assets/D17/6B0/sprockets%2F43a81531e358ce9bb7af8417c875d63a +0 -0
  56. data/spec/dummy/tmp/cache/assets/D18/9C0/sprockets%2Ff92d239ff629c160ee015e3845a6c9c3 +0 -0
  57. data/spec/dummy/tmp/cache/assets/{DE6/B10/sprockets%2Fa0adf3fb2b0054d04dd44c08aff1d6c8 → D19/060/sprockets%2F4be3ef7d038e55cffc27166271638f60} +0 -0
  58. data/spec/dummy/tmp/cache/assets/D1A/3F0/sprockets%2F84181c4b293f3a1c4efe9226652f9e6e +0 -0
  59. data/spec/dummy/tmp/cache/assets/D1E/190/sprockets%2Ff4d68b867965b6cb8d21aea19a053993 +0 -0
  60. data/spec/dummy/tmp/cache/assets/D20/050/sprockets%2F9a286a605e66598f88191e2aa6bd72dd +0 -0
  61. data/spec/dummy/tmp/cache/assets/D2E/130/sprockets%2F5ebb788f274dd034257c0bc0400fae50 +0 -0
  62. data/spec/dummy/tmp/cache/assets/D2E/F10/sprockets%2F156bfd6b405a129f5f003243cf60aea9 +0 -0
  63. data/spec/dummy/tmp/cache/assets/D30/FA0/sprockets%2Fb9d61dc7d19024512c0bdb72391d9bb2 +0 -0
  64. data/spec/dummy/tmp/cache/assets/D3B/440/sprockets%2Fabe31f236167ba051f6ff849d0a7282f +0 -0
  65. data/spec/dummy/tmp/cache/assets/D3B/550/sprockets%2Fb61caf9834ac8c31691851ac024f26ef +0 -0
  66. data/spec/dummy/tmp/cache/assets/D44/A50/sprockets%2F7602cd388554ba54eb914c1b2d7ff68c +0 -0
  67. data/spec/dummy/tmp/cache/assets/D45/CC0/sprockets%2F741e31abcfe889c718bfa7ee58080305 +0 -0
  68. data/spec/dummy/tmp/cache/assets/D46/210/sprockets%2F45a8d49c8edbaf91f38ab1495430384c +0 -0
  69. data/spec/dummy/tmp/cache/assets/D4E/1B0/sprockets%2Ff7cbd26ba1d28d48de824f0e94586655 +0 -0
  70. data/spec/dummy/tmp/cache/assets/D50/0B0/sprockets%2F6c3a019b7442761786cc7bef8e8e7c6c +0 -0
  71. data/spec/dummy/tmp/cache/assets/D53/F80/sprockets%2F11d791b713f9b9cf2bb85bd7f6589b84 +0 -0
  72. data/spec/dummy/tmp/cache/assets/D54/DE0/sprockets%2F77af3e306bb966f71f83e90e2a8868db +0 -0
  73. data/spec/dummy/tmp/cache/assets/D5B/1F0/sprockets%2F4d98e747aa4bb9fc8859f49a45159e1c +0 -0
  74. data/spec/dummy/tmp/cache/assets/{CDE/D90/sprockets%2Fcc733e310d9646637216c4ffe109ea35 → D64/D10/sprockets%2F9857068018fbac51ecd0a7510bcca55e} +0 -0
  75. data/spec/dummy/tmp/cache/assets/{DFD/540/sprockets%2F181ef7a7c275dd2872aa1ed1fcfab75f → D66/8E0/sprockets%2F0cbda18dbb9e414ed0bf1199358e1742} +0 -0
  76. data/spec/dummy/tmp/cache/assets/{D35/470/sprockets%2F2c0a647ea89470a8285b9acb2006dbd5 → D67/480/sprockets%2Fd7dc8cc56f98d1314c3d2ca9c422c104} +0 -0
  77. data/spec/dummy/tmp/cache/assets/D6E/870/sprockets%2F3f77e0b5396013fd145a6fdd21bc9b7f +0 -0
  78. data/spec/dummy/tmp/cache/assets/{CB9/E30/sprockets%2F588cf5763c29e490d026f24e8aa90343 → D71/2D0/sprockets%2F958685af3478f12a33ffaa5cfa26e0d1} +0 -0
  79. data/spec/dummy/tmp/cache/assets/D77/D80/sprockets%2F7ad794c63274a9812dfbabc1dae69692 +0 -0
  80. data/spec/dummy/tmp/cache/assets/D79/DE0/sprockets%2F9e7131d002f39be972e9918bdfbbcc66 +0 -0
  81. data/spec/dummy/tmp/cache/assets/D7C/3A0/sprockets%2Fec63717067efd6b2daf3423edf70f689 +0 -0
  82. data/spec/dummy/tmp/cache/assets/D81/400/sprockets%2F566656e2cc9e698b1dbbd56d6e2e6b36 +0 -0
  83. data/spec/dummy/tmp/cache/assets/D91/320/sprockets%2F322e2344c1fc1234ffd9b3142eecaf6f +0 -0
  84. data/spec/dummy/tmp/cache/assets/D93/0C0/sprockets%2Fab900c084c9c51c312ee3457cee8cdc2 +0 -0
  85. data/spec/dummy/tmp/cache/assets/D93/3F0/sprockets%2Fb6aecc2fe36010208fc8c4cc9e04672c +0 -0
  86. data/spec/dummy/tmp/cache/assets/D97/1B0/sprockets%2Fe0ae6a22a963d0e0819ce6436eb57cae +0 -0
  87. data/spec/dummy/tmp/cache/assets/D98/FD0/sprockets%2F6f253bd2bf824ac38c69bfe1418a04be +0 -0
  88. data/spec/dummy/tmp/cache/assets/D99/CF0/sprockets%2F015b5a48fa7906d045fc23db8a60feef +0 -0
  89. data/spec/dummy/tmp/cache/assets/{DD5/440/sprockets%2F9b3488ba6d62c3dcc809f8cd3dc2d1f5 → DA2/330/sprockets%2F27697dddd23a0913339ccb95dabd7ae7} +0 -0
  90. data/spec/dummy/tmp/cache/assets/DA3/920/sprockets%2F6c45b9f8e0152c78b3c9be1c2e8be53c +0 -0
  91. data/spec/dummy/tmp/cache/assets/DA5/BC0/sprockets%2F5b86068a872e5bd841750d6cbd2dfdbf +0 -0
  92. data/spec/dummy/tmp/cache/assets/DA8/4A0/sprockets%2Ff8ba39d58ace11df624bf7e24c7b5882 +0 -0
  93. data/spec/dummy/tmp/cache/assets/DA8/C30/sprockets%2Fb7d14d588a70a56d7ddac542eef557d6 +0 -0
  94. data/spec/dummy/tmp/cache/assets/DA9/370/sprockets%2Fdf257d496b11ea9c1bb7ee139d68c83e +0 -0
  95. data/spec/dummy/tmp/cache/assets/DAC/D80/sprockets%2Fb8ca14c15e0301b935aaaef327bdc40a +0 -0
  96. data/spec/dummy/tmp/cache/assets/DB6/C30/sprockets%2F377ff9998fde36fcace7c7419ba8b301 +0 -0
  97. data/spec/dummy/tmp/cache/assets/DB8/C30/sprockets%2Fca860af2d10e0c745b6e38b12dabe05f +0 -0
  98. data/spec/dummy/tmp/cache/assets/DBF/630/sprockets%2F8423ad7ae72b0bc6baeac10405389fdf +0 -0
  99. data/spec/dummy/tmp/cache/assets/DC1/530/sprockets%2F4db0b289eee7dad03453a5924c20dcfa +0 -0
  100. data/spec/dummy/tmp/cache/assets/DC6/7D0/sprockets%2Ff7689ac5fafbf683c537892e6ff7f8c3 +0 -0
  101. data/spec/dummy/tmp/cache/assets/DCC/B80/sprockets%2Fb7ae6e7bfa8984c54a4dfaf0011617cd +0 -0
  102. data/spec/dummy/tmp/cache/assets/DCF/0B0/sprockets%2F23db7ab96a5549546bbdd0bc2e6ea86f +0 -0
  103. data/spec/dummy/tmp/cache/assets/DD4/990/sprockets%2F8dc6b77dc74dfdf830aa8f19b92c130d +0 -0
  104. data/spec/dummy/tmp/cache/assets/DF1/A10/sprockets%2Fa925a815ca0bff4d6f42fbdf0d323a4f +0 -0
  105. data/spec/dummy/tmp/cache/assets/DF3/820/sprockets%2Fede955e751bbec440cbbfc00473c34ec +0 -0
  106. data/spec/dummy/tmp/cache/assets/E04/890/sprockets%2F2f5173deea6c795b8fdde723bb4b63af +0 -0
  107. data/spec/dummy/tmp/cache/assets/E3A/110/sprockets%2Fb6d5158ff7ac6d2ca99bfe56a7ddd2e3 +0 -0
  108. data/spec/dummy/tmp/cache/assets/E4B/EE0/sprockets%2F06c4dea4fc3cb561b87bd078aab0facc +0 -0
  109. data/spec/dummy/tmp/cache/assets/E6D/8B0/sprockets%2F9edfdf7e85cdd1a69b0eb14c6ce8ed19 +0 -0
  110. data/spec/dummy/tmp/public/uploads/flms/image_layer/image/5/300px-BabySinclair.jpg +0 -0
  111. data/spec/dummy/tmp/uploads/flms/image_layer/image/4/300px-BabySinclair.jpg +0 -0
  112. data/spec/factories/blocks.rb +0 -1
  113. data/spec/factories/layer.rb +5 -0
  114. data/spec/features/blocks/activating_blocks_spec.rb +18 -0
  115. data/spec/features/blocks/create_spec.rb +1 -2
  116. data/spec/features/blocks/delete_spec.rb +2 -2
  117. data/spec/features/blocks/edit_spec.rb +2 -2
  118. data/spec/features/blocks/show_spec.rb +3 -3
  119. data/spec/features/dashboard_spec.rb +1 -1
  120. data/spec/features/layers/create_spec.rb +22 -0
  121. data/spec/features/layers/index_spec.rb +13 -0
  122. data/spec/features/layers/update_spec.rb +23 -0
  123. data/spec/features/login_spec.rb +1 -1
  124. data/spec/features/pages/create_spec.rb +1 -1
  125. data/spec/features/pages/delete_spec.rb +1 -1
  126. data/spec/features/pages/index_spec.rb +1 -1
  127. data/spec/features/pages/update_spec.rb +1 -1
  128. data/spec/features/users/create_spec.rb +1 -1
  129. data/spec/features/users/delete_spec.rb +1 -1
  130. data/spec/features/users/index_spec.rb +1 -1
  131. data/spec/models/block_spec.rb +4 -4
  132. data/spec/models/page_spec.rb +29 -5
  133. data/spec/support/lets.rb +19 -6
  134. metadata +139 -56
  135. data/app/assets/javascripts/flms/blocks/index.coffee +0 -6
  136. data/spec/dummy/tmp/cache/assets/C9D/180/sprockets%2Fad74b633d2447502477133032afac84b +0 -0
  137. data/spec/dummy/tmp/cache/assets/CE4/6B0/sprockets%2F6e38aec803936176be248f507eb3432d +0 -0
  138. data/spec/dummy/tmp/cache/assets/CED/6A0/sprockets%2Fcc221f5201d658cf456836f8b5547f9d +0 -0
  139. data/spec/dummy/tmp/cache/assets/CF6/740/sprockets%2F0cb88349ae46593e396c4bd68854ed08 +0 -0
  140. data/spec/dummy/tmp/cache/assets/D01/E80/sprockets%2Fc1a3694915166d6a041afa4bb062fd84 +0 -0
  141. data/spec/dummy/tmp/cache/assets/D07/250/sprockets%2Fa8bf27de087b582dc454910a060e0b84 +0 -0
  142. data/spec/dummy/tmp/cache/assets/D0D/510/sprockets%2Fa189f1a8718ff11152feb3c43c75b841 +0 -0
  143. data/spec/dummy/tmp/cache/assets/D1E/1D0/sprockets%2Ffeec495723d877b92c74db2055516bc9 +0 -0
  144. data/spec/dummy/tmp/cache/assets/D4A/B40/sprockets%2F509d2dc1350975d781c50dffc58ef53f +0 -0
  145. data/spec/dummy/tmp/cache/assets/D65/690/sprockets%2F511f71e32f87da06df67250bb39abdc2 +0 -0
  146. data/spec/dummy/tmp/cache/assets/D81/300/sprockets%2F9543b0420abb11b0a126a8384edddafe +0 -0
  147. data/spec/dummy/tmp/cache/assets/D9E/220/sprockets%2Fd129fcf804e89814c2f4abbe0336cba9 +0 -0
  148. data/spec/dummy/tmp/cache/assets/DAE/F10/sprockets%2F46950fdbeed95ba83ca8e7215194ddf8 +0 -0
  149. data/spec/dummy/tmp/cache/assets/DB2/1F0/sprockets%2F9fe57997f92efbee3b03df4510a2df57 +0 -0
  150. data/spec/dummy/tmp/cache/assets/DCE/790/sprockets%2Fff77d67febbb3af024f721c0bb4c4749 +0 -0
  151. data/spec/dummy/tmp/cache/assets/DFA/FF0/sprockets%2F75699fed9ddaecd89464492eeeef90d8 +0 -0
  152. 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.
@@ -13,5 +13,6 @@
13
13
  //= require jquery
14
14
  //= require jquery_ujs
15
15
  //= require jquery-ui
16
+ //= require modularity/modularity
16
17
  //= require_tree .
17
18
  //= require bootstrapSwitch
@@ -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
+
@@ -26,3 +26,7 @@ body.blocks.index
26
26
  background-color: red
27
27
  border: 2px solid yellow
28
28
  height: 47px
29
+
30
+ #save
31
+ float: right
32
+ display: none
@@ -0,0 +1,5 @@
1
+ body.blocks.show
2
+
3
+ #save
4
+ float: right
5
+ display: none
@@ -1,32 +1,38 @@
1
- body.user_sessions.new,
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
- padding-top: 40px
8
+ padding-top: 20px
8
9
 
9
- .form-signin
10
- max-width: 300px
11
- padding: 19px 29px 29px
12
- margin: 0 auto 20px
13
- background-color: #fff
14
- border: 1px solid #e5e5e5
15
- -webkit-border-radius: 5px
16
- -moz-border-radius: 5px
17
- border-radius: 5px
18
- -webkit-box-shadow: 0 1px 2px rgba(0,0,0,.05)
19
- -moz-box-shadow: 0 1px 2px rgba(0,0,0,.05)
20
- box-shadow: 0 1px 2px rgba(0,0,0,.05)
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
- .form-signin-heading, .checkbox
23
- margin-bottom: 10px
23
+ .form-signin-heading, .checkbox
24
+ margin-bottom: 10px
24
25
 
25
- input[type="text"],
26
- input[type="password"],
27
- input[type="email"]
28
- font-size: 16px
29
- height: auto
30
- margin-bottom: 15px
31
- padding: 7px 9px
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
+
@@ -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
@@ -1,6 +1,6 @@
1
1
  module Flms
2
2
  class BlocksPage < ActiveRecord::Base
3
- attr_accessible :block_id, :page_id
3
+ attr_accessible :block_id, :block, :page_id, :page, :ordering, :active
4
4
 
5
5
  belongs_to :block, class_name: 'Flms::Block'
6
6
  belongs_to :page, class_name: 'Flms::Page'
@@ -0,0 +1,7 @@
1
+ module Flms
2
+ class Layer < ActiveRecord::Base
3
+ attr_accessible :name, :type
4
+
5
+ belongs_to :block
6
+ end
7
+ end
@@ -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.blocks
17
- - @blocks.each do |block|
18
- %tr.ui-state-default
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
- %input{type: 'checkbox'}
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
- Block
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