flms 0.0.1 → 0.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (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