jc_cms 0.0.1

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 (264) hide show
  1. data/MIT-LICENSE +20 -0
  2. data/README.rdoc +3 -0
  3. data/Rakefile +40 -0
  4. data/app/assets/images/jc_cms/ok.png +0 -0
  5. data/app/assets/javascripts/jc_cms/application.js +16 -0
  6. data/app/assets/javascripts/jc_cms/bootstrap.js.coffee +4 -0
  7. data/app/assets/javascripts/jc_cms/dashboard/dashboard.js +2 -0
  8. data/app/assets/javascripts/jc_cms/dashboard/pages.js.coffee +3 -0
  9. data/app/assets/javascripts/jc_cms/home.js.coffee +3 -0
  10. data/app/assets/stylesheets/jc_cms/application.css +18 -0
  11. data/app/assets/stylesheets/jc_cms/bootstrap_and_overrides.css.less +34 -0
  12. data/app/assets/stylesheets/jc_cms/bootswatch.css.less +181 -0
  13. data/app/assets/stylesheets/jc_cms/dashboard/dashboard.css +4 -0
  14. data/app/assets/stylesheets/jc_cms/dashboard/pages.css.scss +3 -0
  15. data/app/assets/stylesheets/jc_cms/home.css.scss +3 -0
  16. data/app/assets/stylesheets/jc_cms/variables.css.less +301 -0
  17. data/app/cells/page/show.html.haml +4 -0
  18. data/app/cells/page_cell.rb +7 -0
  19. data/app/cells/pages_menu/show.html.haml +7 -0
  20. data/app/cells/pages_menu_cell.rb +8 -0
  21. data/app/controllers/jc_cms/application_controller.rb +17 -0
  22. data/app/controllers/jc_cms/dashboard/dashboard_controller.rb +10 -0
  23. data/app/controllers/jc_cms/dashboard/pages_controller.rb +42 -0
  24. data/app/controllers/jc_cms/home_controller.rb +6 -0
  25. data/app/helpers/jc_cms/application_helper.rb +4 -0
  26. data/app/helpers/jc_cms/dashboard/dashboard_helper.rb +4 -0
  27. data/app/models/ckeditor/asset.rb +7 -0
  28. data/app/models/ckeditor/attachment_file.rb +7 -0
  29. data/app/models/ckeditor/picture.rb +7 -0
  30. data/app/models/jc_cms/page.rb +11 -0
  31. data/app/models/jc_cms/user.rb +13 -0
  32. data/app/uploaders/ckeditor_attachment_file_uploader.rb +44 -0
  33. data/app/uploaders/ckeditor_picture_uploader.rb +55 -0
  34. data/app/views/jc_cms/dashboard/dashboard/index.html.erb +1 -0
  35. data/app/views/jc_cms/dashboard/pages/_form.html.haml +14 -0
  36. data/app/views/jc_cms/dashboard/pages/edit.html.haml +2 -0
  37. data/app/views/jc_cms/dashboard/pages/index.html.haml +25 -0
  38. data/app/views/jc_cms/dashboard/pages/new.html.haml +2 -0
  39. data/app/views/jc_cms/dashboard/pages/show.html.haml +2 -0
  40. data/app/views/jc_cms/home/index.html.haml +1 -0
  41. data/app/views/jc_cms/users/confirmations/new.html.erb +15 -0
  42. data/app/views/jc_cms/users/mailer/confirmation_instructions.html.erb +5 -0
  43. data/app/views/jc_cms/users/mailer/reset_password_instructions.html.erb +8 -0
  44. data/app/views/jc_cms/users/mailer/unlock_instructions.html.erb +7 -0
  45. data/app/views/jc_cms/users/passwords/edit.html.erb +19 -0
  46. data/app/views/jc_cms/users/passwords/new.html.erb +15 -0
  47. data/app/views/jc_cms/users/registrations/edit.html.erb +22 -0
  48. data/app/views/jc_cms/users/registrations/new.html.erb +17 -0
  49. data/app/views/jc_cms/users/sessions/new.html.erb +13 -0
  50. data/app/views/jc_cms/users/shared/_links.erb +25 -0
  51. data/app/views/jc_cms/users/unlocks/new.html.erb +15 -0
  52. data/app/views/layouts/jc_cms/application.html.erb +90 -0
  53. data/app/views/layouts/jc_cms/jc_cms.html.erb +86 -0
  54. data/config/application.rb +63 -0
  55. data/config/boot.rb +6 -0
  56. data/config/environment.rb +5 -0
  57. data/config/initializers/backtrace_silencers.rb +7 -0
  58. data/config/initializers/ckeditor.rb +18 -0
  59. data/config/initializers/devise.rb +233 -0
  60. data/config/initializers/inflections.rb +15 -0
  61. data/config/initializers/mime_types.rb +5 -0
  62. data/config/initializers/simple_form.rb +142 -0
  63. data/config/initializers/simple_form_bootstrap.rb +45 -0
  64. data/config/initializers/wrap_parameters.rb +14 -0
  65. data/config/locales/devise.en.yml +58 -0
  66. data/config/locales/devise.pl.yml +62 -0
  67. data/config/locales/en.yml +5 -0
  68. data/config/locales/pl.yml +246 -0
  69. data/config/locales/simple_form.en.yml +26 -0
  70. data/config/locales/simple_form.pl.yml +36 -0
  71. data/config/routes.rb +14 -0
  72. data/db/migrate/20121107230840_create_pages.rb +20 -0
  73. data/db/migrate/20121112234336_create_ckeditor_assets.rb +26 -0
  74. data/db/migrate/20121118205852_devise_create_cms_users.rb +46 -0
  75. data/lib/jc_cms/engine.rb +5 -0
  76. data/lib/jc_cms/version.rb +3 -0
  77. data/lib/jc_cms.rb +4 -0
  78. data/lib/tasks/jc_cms_tasks.rake +4 -0
  79. data/test/dummy/README.rdoc +261 -0
  80. data/test/dummy/Rakefile +7 -0
  81. data/test/dummy/app/assets/javascripts/application.js +15 -0
  82. data/test/dummy/app/assets/stylesheets/application.css +13 -0
  83. data/test/dummy/app/controllers/application_controller.rb +3 -0
  84. data/test/dummy/app/helpers/application_helper.rb +2 -0
  85. data/test/dummy/app/models/ckeditor/asset.rb +7 -0
  86. data/test/dummy/app/models/ckeditor/attachment_file.rb +7 -0
  87. data/test/dummy/app/models/ckeditor/picture.rb +7 -0
  88. data/test/dummy/app/uploaders/ckeditor_attachment_file_uploader.rb +42 -0
  89. data/test/dummy/app/uploaders/ckeditor_picture_uploader.rb +53 -0
  90. data/test/dummy/app/views/layouts/application.html.erb +14 -0
  91. data/test/dummy/config/application.rb +60 -0
  92. data/test/dummy/config/boot.rb +10 -0
  93. data/test/dummy/config/database.yml +25 -0
  94. data/test/dummy/config/environment.rb +5 -0
  95. data/test/dummy/config/environments/development.rb +37 -0
  96. data/test/dummy/config/environments/production.rb +67 -0
  97. data/test/dummy/config/environments/test.rb +37 -0
  98. data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
  99. data/test/dummy/config/initializers/ckeditor.rb +18 -0
  100. data/test/dummy/config/initializers/inflections.rb +15 -0
  101. data/test/dummy/config/initializers/mime_types.rb +5 -0
  102. data/test/dummy/config/initializers/secret_token.rb +7 -0
  103. data/test/dummy/config/initializers/session_store.rb +8 -0
  104. data/test/dummy/config/initializers/wrap_parameters.rb +14 -0
  105. data/test/dummy/config/locales/en.yml +5 -0
  106. data/test/dummy/config/routes.rb +6 -0
  107. data/test/dummy/config.ru +4 -0
  108. data/test/dummy/db/development.sqlite3 +0 -0
  109. data/test/dummy/db/migrate/20121216213708_create_locations.jc_cms.rb +15 -0
  110. data/test/dummy/db/migrate/20121216213709_create_pages.jc_cms.rb +22 -0
  111. data/test/dummy/db/migrate/20121216213710_create_ckeditor_assets.jc_cms.rb +27 -0
  112. data/test/dummy/db/migrate/20121216213711_devise_create_cms_users.jc_cms.rb +47 -0
  113. data/test/dummy/db/migrate/20121216224201_create_ckeditor_assets.rb +26 -0
  114. data/test/dummy/db/schema.rb +70 -0
  115. data/test/dummy/log/development.log +21503 -0
  116. data/test/dummy/public/404.html +26 -0
  117. data/test/dummy/public/422.html +26 -0
  118. data/test/dummy/public/500.html +25 -0
  119. data/test/dummy/public/favicon.ico +0 -0
  120. data/test/dummy/public/uploads/ckeditor/pictures/1/Zrzut_ekranu_z_2012-11-13_22_39_26.png +0 -0
  121. data/test/dummy/public/uploads/ckeditor/pictures/1/content_Zrzut_ekranu_z_2012-11-13_22_39_26.png +0 -0
  122. data/test/dummy/public/uploads/ckeditor/pictures/1/thumb_Zrzut_ekranu_z_2012-11-13_22_39_26.png +0 -0
  123. data/test/dummy/public/uploads/ckeditor/pictures/2/Zrzut_ekranu_z_2012-11-13_22_39_26.png +0 -0
  124. data/test/dummy/public/uploads/ckeditor/pictures/2/content_Zrzut_ekranu_z_2012-11-13_22_39_26.png +0 -0
  125. data/test/dummy/public/uploads/ckeditor/pictures/2/thumb_Zrzut_ekranu_z_2012-11-13_22_39_26.png +0 -0
  126. data/test/dummy/script/rails +6 -0
  127. data/test/dummy/tmp/cache/assets/C07/8C0/sprockets%2F64646b098528c9808ce15815c4496607 +0 -0
  128. data/test/dummy/tmp/cache/assets/C09/B90/sprockets%2F72126398325c80c78fd6678718473a84 +0 -0
  129. data/test/dummy/tmp/cache/assets/C46/520/sprockets%2Fee0865a4980d56313339e053a1218f20 +0 -0
  130. data/test/dummy/tmp/cache/assets/C59/490/sprockets%2F9600e95c2208a04b71582af3e8688854 +0 -0
  131. data/test/dummy/tmp/cache/assets/C5A/E90/sprockets%2F6d94f48b07e6690559f54061152154fa +0 -0
  132. data/test/dummy/tmp/cache/assets/C5D/6E0/sprockets%2F27494740406c86656742cf4e3128b9ce +0 -0
  133. data/test/dummy/tmp/cache/assets/C5E/310/sprockets%2Ff149155a6c5a09834cf158617963676a +0 -0
  134. data/test/dummy/tmp/cache/assets/C64/7E0/sprockets%2F4347701f6cd7118799d285377f38a5d2 +0 -0
  135. data/test/dummy/tmp/cache/assets/C66/760/sprockets%2Fc335e045119111f98632e9f62f6888f8 +0 -0
  136. data/test/dummy/tmp/cache/assets/C67/FE0/sprockets%2F67f52995585deb28a55c25394d601757 +0 -0
  137. data/test/dummy/tmp/cache/assets/C79/540/sprockets%2Fd40ecc5f0532937936b7c83101e43614 +0 -0
  138. data/test/dummy/tmp/cache/assets/C87/890/sprockets%2F6093c36edd443ed062379a9966c55023 +0 -0
  139. data/test/dummy/tmp/cache/assets/C8B/D60/sprockets%2Fa42a3175cd067427e36648605ee69f84 +0 -0
  140. data/test/dummy/tmp/cache/assets/C8E/6E0/sprockets%2Fa8b21b14c23c038a2473c2b58304530c +0 -0
  141. data/test/dummy/tmp/cache/assets/C92/500/sprockets%2F1058b7805167e75c2b97121d78e97de7 +0 -0
  142. data/test/dummy/tmp/cache/assets/CA3/130/sprockets%2F469beac37850c6141bf41882018b601b +0 -0
  143. data/test/dummy/tmp/cache/assets/CA7/3B0/sprockets%2Ffd1e83a3755907b8a606f30a41307a19 +0 -0
  144. data/test/dummy/tmp/cache/assets/CB0/F70/sprockets%2Fd9043423e669960cf03ae665c5b427a3 +0 -0
  145. data/test/dummy/tmp/cache/assets/CB4/4B0/sprockets%2F5847a771ed4b27500f51e73a91e6b934 +0 -0
  146. data/test/dummy/tmp/cache/assets/CB9/650/sprockets%2Fec2d52e0987701dd208d18c8996e3351 +0 -0
  147. data/test/dummy/tmp/cache/assets/CBB/D10/sprockets%2F1b2c89754d436451d980455e8fca09a7 +0 -0
  148. data/test/dummy/tmp/cache/assets/CBB/F10/sprockets%2F5ebb0567b58c43c0773b686546b295c8 +0 -0
  149. data/test/dummy/tmp/cache/assets/CC7/A50/sprockets%2F81f095124c73bdb22433c6a65a3d10c3 +0 -0
  150. data/test/dummy/tmp/cache/assets/CC9/B70/sprockets%2Ff9856126986468185e48fbc6b2da155e +0 -0
  151. data/test/dummy/tmp/cache/assets/CCD/E70/sprockets%2Fb6162d50af74a01c7cd2565082d3e181 +0 -0
  152. data/test/dummy/tmp/cache/assets/CD0/070/sprockets%2F5412439eb13284f0a3b08c28273febd1 +0 -0
  153. data/test/dummy/tmp/cache/assets/CD0/5B0/sprockets%2F681bb88d099369e235d531892e9d9a8f +0 -0
  154. data/test/dummy/tmp/cache/assets/CD8/370/sprockets%2F357970feca3ac29060c1e3861e2c0953 +0 -0
  155. data/test/dummy/tmp/cache/assets/CD9/D10/sprockets%2F33ba9401ac4819f676d06ea642e614d3 +0 -0
  156. data/test/dummy/tmp/cache/assets/CDE/F50/sprockets%2Fa7e186ae00816cf344cae8394246a087 +0 -0
  157. data/test/dummy/tmp/cache/assets/CDF/0D0/sprockets%2Fe45b3bd832715a12e9c1f6cc91470838 +0 -0
  158. data/test/dummy/tmp/cache/assets/CE2/8E0/sprockets%2F9b322b80baee847d191297c1be634863 +0 -0
  159. data/test/dummy/tmp/cache/assets/CE4/0B0/sprockets%2F58e822726dd1560cff2cd626542c5c74 +0 -0
  160. data/test/dummy/tmp/cache/assets/CE9/8E0/sprockets%2Fd2c16c246539568db289da6c98fc1026 +0 -0
  161. data/test/dummy/tmp/cache/assets/CEB/010/sprockets%2F84229e36d60efb34c64354c4c9eb3938 +0 -0
  162. data/test/dummy/tmp/cache/assets/CEC/D50/sprockets%2F92c13f7d07456dad81dd5246bd859349 +0 -0
  163. data/test/dummy/tmp/cache/assets/CEE/CA0/sprockets%2Feda89fff0c47312925a8918192e178c2 +0 -0
  164. data/test/dummy/tmp/cache/assets/CEF/E90/sprockets%2F92f31af9445568181cf8068a5a5a9f4e +0 -0
  165. data/test/dummy/tmp/cache/assets/CF4/520/sprockets%2F1114f42d76e827c6a9758966bf9dbb45 +0 -0
  166. data/test/dummy/tmp/cache/assets/D00/DB0/sprockets%2F88e2ffc1c52a23d43921baf530d71315 +0 -0
  167. data/test/dummy/tmp/cache/assets/D01/170/sprockets%2F0b5555cc3795f64eaaab40272c9a0443 +0 -0
  168. data/test/dummy/tmp/cache/assets/D03/780/sprockets%2F397bfee3e1000d0581f8c375bb0245a7 +0 -0
  169. data/test/dummy/tmp/cache/assets/D03/C60/sprockets%2F97f47db90e6fc62c4d7c6387828397d5 +0 -0
  170. data/test/dummy/tmp/cache/assets/D08/060/sprockets%2F69dde8caa562064090b325ae8045bc92 +0 -0
  171. data/test/dummy/tmp/cache/assets/D09/2C0/sprockets%2F360a0f84dbf6b2a3106df55d0d881469 +0 -0
  172. data/test/dummy/tmp/cache/assets/D0D/560/sprockets%2Fae539b122faaf679d9e32247e050682a +0 -0
  173. data/test/dummy/tmp/cache/assets/D0F/C80/sprockets%2F5780677e72a94f1af9da0e24a30e84c0 +0 -0
  174. data/test/dummy/tmp/cache/assets/D11/0A0/sprockets%2Ff05fb4198cd543304f9cd14a412be969 +0 -0
  175. data/test/dummy/tmp/cache/assets/D11/DA0/sprockets%2F601da0adf47d60282972e473b64eeb97 +0 -0
  176. data/test/dummy/tmp/cache/assets/D15/2C0/sprockets%2Fdeb34df73f715b491c843655606b06ee +0 -0
  177. data/test/dummy/tmp/cache/assets/D17/690/sprockets%2Fa75ae0c2703ef284758d27620f84ef6d +0 -0
  178. data/test/dummy/tmp/cache/assets/D1E/950/sprockets%2F91d9e2e8575267cea4a2cb342669d67c +0 -0
  179. data/test/dummy/tmp/cache/assets/D20/670/sprockets%2F5f24e9ae131b4909f779ead84d4474a7 +0 -0
  180. data/test/dummy/tmp/cache/assets/D28/AA0/sprockets%2Fe9f5960dc9465591182cd6c1ff1a98c8 +0 -0
  181. data/test/dummy/tmp/cache/assets/D2A/1B0/sprockets%2F042e74be6a1c2862c1fbdd433a1127d6 +0 -0
  182. data/test/dummy/tmp/cache/assets/D2A/5F0/sprockets%2Ff4dcb9ce765ea4667a6925613c68289f +0 -0
  183. data/test/dummy/tmp/cache/assets/D2C/CB0/sprockets%2F12d3089b5b4aed1055b9413ee05cfd04 +0 -0
  184. data/test/dummy/tmp/cache/assets/D2F/6A0/sprockets%2Fbe0da0721240eba9ec280c3f65595d42 +0 -0
  185. data/test/dummy/tmp/cache/assets/D30/BA0/sprockets%2F7434264acdbb0a912f2325a92dd625ee +0 -0
  186. data/test/dummy/tmp/cache/assets/D32/A10/sprockets%2F13fe41fee1fe35b49d145bcc06610705 +0 -0
  187. data/test/dummy/tmp/cache/assets/D36/A00/sprockets%2F794a48f8e74df2f775ab5e289f385a87 +0 -0
  188. data/test/dummy/tmp/cache/assets/D36/C00/sprockets%2F31d5b05a9ef64c11c99038b8f3ea024c +0 -0
  189. data/test/dummy/tmp/cache/assets/D39/370/sprockets%2F8617aa36e80a726daf01548abecf7514 +0 -0
  190. data/test/dummy/tmp/cache/assets/D3B/D80/sprockets%2Fb54b6d7431d3fa350fd4860ec48376ba +0 -0
  191. data/test/dummy/tmp/cache/assets/D3C/2F0/sprockets%2F51cdd57d7fb8dd62a0c62c76b3185621 +0 -0
  192. data/test/dummy/tmp/cache/assets/D44/880/sprockets%2F4a4c96693e3a1a39c3f8b91228eeb54c +0 -0
  193. data/test/dummy/tmp/cache/assets/D44/BF0/sprockets%2Fa595dfd60f55332e66ed0e2a536883ad +0 -0
  194. data/test/dummy/tmp/cache/assets/D45/960/sprockets%2F36d2078b56c85b2e7e83bb1ebc3509f8 +0 -0
  195. data/test/dummy/tmp/cache/assets/D45/B00/sprockets%2Fc738c84515abd254264ebce779ed63d0 +0 -0
  196. data/test/dummy/tmp/cache/assets/D45/F80/sprockets%2Fe43ea8a1ded751a980c53a850889de33 +0 -0
  197. data/test/dummy/tmp/cache/assets/D48/7D0/sprockets%2F36f7c25f24e292b18fde7638f08aa9c0 +0 -0
  198. data/test/dummy/tmp/cache/assets/D48/C10/sprockets%2F6fcf9db784da5ae76551831162eb76c1 +0 -0
  199. data/test/dummy/tmp/cache/assets/D4C/860/sprockets%2F7e45fa7bc38e7fe824e248f2a496f300 +0 -0
  200. data/test/dummy/tmp/cache/assets/D4C/E70/sprockets%2Fd925ba6277eb18ccee7826175149d5ce +0 -0
  201. data/test/dummy/tmp/cache/assets/D4E/1B0/sprockets%2Ff7cbd26ba1d28d48de824f0e94586655 +0 -0
  202. data/test/dummy/tmp/cache/assets/D52/550/sprockets%2F0e729ff182c56eac9cb66f61885ac746 +0 -0
  203. data/test/dummy/tmp/cache/assets/D53/720/sprockets%2F06e82479780b08ef39ee251d5ff1ecf8 +0 -0
  204. data/test/dummy/tmp/cache/assets/D54/A00/sprockets%2F3df92468167df36c8fe4985fca50cd16 +0 -0
  205. data/test/dummy/tmp/cache/assets/D5A/EA0/sprockets%2Fd771ace226fc8215a3572e0aa35bb0d6 +0 -0
  206. data/test/dummy/tmp/cache/assets/D5E/CC0/sprockets%2F11ff861f4f3307eb12da5333f34a9aba +0 -0
  207. data/test/dummy/tmp/cache/assets/D5F/F70/sprockets%2F4b083a83b2d19280ecf82d80cb0ec35a +0 -0
  208. data/test/dummy/tmp/cache/assets/D60/D30/sprockets%2Ff42c2090b3b42edbb29b14b8ca8c9381 +0 -0
  209. data/test/dummy/tmp/cache/assets/D63/FE0/sprockets%2F7c06e0b1e3f36943b4b6ac29ea2f03b8 +0 -0
  210. data/test/dummy/tmp/cache/assets/D70/260/sprockets%2Fec4232a583d51ebb6f61f3733dfe773d +0 -0
  211. data/test/dummy/tmp/cache/assets/D70/E40/sprockets%2F9be15c072df1cf29447f13c75fcea462 +0 -0
  212. data/test/dummy/tmp/cache/assets/D72/8B0/sprockets%2Fa6a44539fe3bd2f93df1d758acc81640 +0 -0
  213. data/test/dummy/tmp/cache/assets/D72/E50/sprockets%2F9fb77b92c0d85bef0e58e52d1c4202b9 +0 -0
  214. data/test/dummy/tmp/cache/assets/D73/5A0/sprockets%2F7c6389b8bb1dd2a68aa4c36734cb98e0 +0 -0
  215. data/test/dummy/tmp/cache/assets/D75/360/sprockets%2F293ef946e8f2bd1c0302fd97cc43ea39 +0 -0
  216. data/test/dummy/tmp/cache/assets/D7A/B20/sprockets%2F4fae9bff57ef326bc3263b7864730b5f +0 -0
  217. data/test/dummy/tmp/cache/assets/D7B/9A0/sprockets%2F769e91c33d9359c2dc9a1aa64ebf89b0 +0 -0
  218. data/test/dummy/tmp/cache/assets/D7D/C10/sprockets%2Fb0b77d34568b99bf0e1bf912ec8cf378 +0 -0
  219. data/test/dummy/tmp/cache/assets/D7E/DD0/sprockets%2F971cab035c4a28fc46bb20ab01a8c14c +0 -0
  220. data/test/dummy/tmp/cache/assets/D84/9E0/sprockets%2F57ec681758c9ce6c50bad69b835bf9c3 +0 -0
  221. data/test/dummy/tmp/cache/assets/D8D/E00/sprockets%2Ff08e1adc2ab7550fabf4210b7cf21587 +0 -0
  222. data/test/dummy/tmp/cache/assets/D8E/E50/sprockets%2F3a83cb2dd3c1df4c4e45037bef17a244 +0 -0
  223. data/test/dummy/tmp/cache/assets/D94/C30/sprockets%2Fec42b5f7ac9042dd6d3ce26f002de616 +0 -0
  224. data/test/dummy/tmp/cache/assets/D98/380/sprockets%2Fcf1c474c0bb8c73996ac31a5db5465ac +0 -0
  225. data/test/dummy/tmp/cache/assets/D99/BE0/sprockets%2Fd7a16c2e0d6d3b4265bb4d6eb5be7484 +0 -0
  226. data/test/dummy/tmp/cache/assets/D9F/7A0/sprockets%2F419e4ca288cce5faa35ec702cce63674 +0 -0
  227. data/test/dummy/tmp/cache/assets/DA0/CE0/sprockets%2F9f2b2767dfb1bbfd32ed538278a0f72a +0 -0
  228. data/test/dummy/tmp/cache/assets/DA1/480/sprockets%2F4c7b27d4ebedd93a0da0628e36f6809c +0 -0
  229. data/test/dummy/tmp/cache/assets/DA2/CD0/sprockets%2Fa99c7b02f4a462d48f68ac7a1d24dbf7 +0 -0
  230. data/test/dummy/tmp/cache/assets/DA3/F20/sprockets%2Fc05a73e30703be304fd9fe8db4cf598e +0 -0
  231. data/test/dummy/tmp/cache/assets/DB9/3D0/sprockets%2F02571f86c7cfe0fc11bfc3d1bbb1c208 +0 -0
  232. data/test/dummy/tmp/cache/assets/DC4/540/sprockets%2Fadee232b4e5d1dc4537d796d64ac2ac1 +0 -0
  233. data/test/dummy/tmp/cache/assets/DC4/590/sprockets%2F2dc05e1dc0a167e4735ac1dd76dafa97 +0 -0
  234. data/test/dummy/tmp/cache/assets/DC5/FE0/sprockets%2Fe41e0b207ecd4cd2e8284cfbb30e557e +0 -0
  235. data/test/dummy/tmp/cache/assets/DC7/100/sprockets%2F11ac5c4013dd9e91fde638af50c3f1ff +0 -0
  236. data/test/dummy/tmp/cache/assets/DC7/990/sprockets%2F5c956d26ecca1dfe4fb9eaa394301f01 +0 -0
  237. data/test/dummy/tmp/cache/assets/DCA/190/sprockets%2F18a3206d6ecdd1eb90afb684ae9ec345 +0 -0
  238. data/test/dummy/tmp/cache/assets/DCE/380/sprockets%2Fb8f50d4e2dedd941e46a4bc23dd7e391 +0 -0
  239. data/test/dummy/tmp/cache/assets/DDA/D50/sprockets%2F61e799bee7414e75bafc34fae4bd049f +0 -0
  240. data/test/dummy/tmp/cache/assets/DDB/B60/sprockets%2Fb9f5599ad317c420899cebe81bbefa3d +0 -0
  241. data/test/dummy/tmp/cache/assets/DDC/400/sprockets%2Fcffd775d018f68ce5dba1ee0d951a994 +0 -0
  242. data/test/dummy/tmp/cache/assets/DDD/EA0/sprockets%2Ff7ece9144ddb7c4e33667f76caa8d3b6 +0 -0
  243. data/test/dummy/tmp/cache/assets/DFF/1B0/sprockets%2Fc12c9bb21df8b6797b49adc1c7aaf8e2 +0 -0
  244. data/test/dummy/tmp/cache/assets/E04/5E0/sprockets%2F38bfd5bbb49de4a45f5a51971cdf6be5 +0 -0
  245. data/test/dummy/tmp/cache/assets/E04/890/sprockets%2F2f5173deea6c795b8fdde723bb4b63af +0 -0
  246. data/test/dummy/tmp/cache/assets/E05/CD0/sprockets%2Fc8ea7dcae5c0f1974e75cbf110d9ca99 +0 -0
  247. data/test/dummy/tmp/cache/assets/E06/F80/sprockets%2Fc89d2b450fccd9e2efcdcb0446b4679d +0 -0
  248. data/test/dummy/tmp/cache/assets/E08/BA0/sprockets%2Fbe24d2682f98eea5a7fa60fa62fded56 +0 -0
  249. data/test/dummy/tmp/cache/assets/E1F/2A0/sprockets%2F0cf165eccecfa19ad5dc2944403a1cfd +0 -0
  250. data/test/dummy/tmp/cache/assets/E26/430/sprockets%2Fc2823ee45c2582bcec34a905fcacbdef +0 -0
  251. data/test/dummy/tmp/cache/assets/E2B/A30/sprockets%2Fdccc7eaad9b961b83f453b65b4b5cc0f +0 -0
  252. data/test/dummy/tmp/cache/assets/E39/4E0/sprockets%2Fee2fd1f87ee7cd516ea52e8c1ebc9e16 +0 -0
  253. data/test/dummy/tmp/cache/assets/E3B/EB0/sprockets%2Fa8e36f0a9d6869490d5da55cbcfccfec +0 -0
  254. data/test/dummy/tmp/cache/assets/E58/840/sprockets%2Fadeedcbe177fa92bf217db08f504d5bd +0 -0
  255. data/test/dummy/tmp/cache/assets/E7B/380/sprockets%2F1bccb9b3a0bf0b9d92f3fad21fafca56 +0 -0
  256. data/test/dummy/tmp/pids/server.pid +1 -0
  257. data/test/fixtures/jc_cms/cms_users.yml +11 -0
  258. data/test/functional/jc_cms/dashboard/dashboard_controller_test.rb +11 -0
  259. data/test/integration/navigation_test.rb +10 -0
  260. data/test/jc_cms_test.rb +7 -0
  261. data/test/test_helper.rb +15 -0
  262. data/test/unit/helpers/jc_cms/dashboard/dashboard_helper_test.rb +6 -0
  263. data/test/unit/jc_cms/cms_user_test.rb +9 -0
  264. metadata +525 -0
@@ -0,0 +1,17 @@
1
+ module JcCms
2
+ class ApplicationController < ActionController::Base
3
+ protect_from_forgery
4
+ layout :layout_by_resource
5
+
6
+ protected
7
+
8
+ def layout_by_resource
9
+ if devise_controller? && resource_name == :cms_user
10
+ "jc_cms"
11
+ else
12
+ "application"
13
+ end
14
+ end
15
+
16
+ end
17
+ end
@@ -0,0 +1,10 @@
1
+
2
+ module JcCms
3
+ class Dashboard::DashboardController < ApplicationController
4
+ layout "jc_cms/jc_cms"
5
+ before_filter :authenticate_user!
6
+
7
+ def index
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,42 @@
1
+ module JcCms
2
+ class Dashboard::PagesController < ApplicationController
3
+ layout "jc_cms/jc_cms"
4
+ before_filter :authenticate_user!
5
+
6
+ def index
7
+ @pages = Page.all
8
+ end
9
+
10
+ def show
11
+ @page = Page.find(params[:id])
12
+ end
13
+
14
+ def new
15
+ @page = Page.new
16
+ end
17
+
18
+ def create
19
+ @page = Page.new
20
+ @page.assign_attributes(params[:page])
21
+ @page.save!
22
+ redirect_to dashboard_pages_path
23
+ end
24
+
25
+ def edit
26
+ @page = Page.find(params[:id])
27
+ end
28
+
29
+ def update
30
+ @page = Page.find(params[:id])
31
+ @page.assign_attributes(params[:page])
32
+ @page.save!
33
+ redirect_to dashboard_page_path(@page)
34
+ end
35
+
36
+ def destroy
37
+ page = Page.find(params[:id])
38
+ page.delete
39
+ redirect_to dashboard_pages_path
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,6 @@
1
+ module JcCms
2
+ class HomeController < ApplicationController
3
+ def index
4
+ end
5
+ end
6
+ end
@@ -0,0 +1,4 @@
1
+ module JcCms
2
+ module ApplicationHelper
3
+ end
4
+ end
@@ -0,0 +1,4 @@
1
+ module JcCms
2
+ module Dashboard::DashboardHelper
3
+ end
4
+ end
@@ -0,0 +1,7 @@
1
+ class Ckeditor::Asset < ActiveRecord::Base
2
+ include Ckeditor::Orm::ActiveRecord::AssetBase
3
+
4
+ delegate :url, :current_path, :size, :content_type, :filename, :to => :data
5
+
6
+ validates_presence_of :data
7
+ end
@@ -0,0 +1,7 @@
1
+ class Ckeditor::AttachmentFile < Ckeditor::Asset
2
+ mount_uploader :data, CkeditorAttachmentFileUploader, :mount_on => :data_file_name
3
+
4
+ def url_thumb
5
+ @url_thumb ||= Ckeditor::Utils.filethumb(filename)
6
+ end
7
+ end
@@ -0,0 +1,7 @@
1
+ class Ckeditor::Picture < Ckeditor::Asset
2
+ mount_uploader :data, CkeditorPictureUploader, :mount_on => :data_file_name
3
+
4
+ def url_content
5
+ url(:content)
6
+ end
7
+ end
@@ -0,0 +1,11 @@
1
+ module JcCms
2
+ class Page < ActiveRecord::Base
3
+ attr_accessible :content, :meta_description, :meta_keywords, :meta_title, :name, :page_id, :active, :position
4
+ belongs_to :page
5
+ has_many :pages
6
+
7
+ scope :actives, where(:active => true)
8
+
9
+ validates :name, :content, :presence => true
10
+ end
11
+ end
@@ -0,0 +1,13 @@
1
+ module JcCms
2
+ class User < ActiveRecord::Base
3
+ # Include default devise modules. Others available are:
4
+ # :token_authenticatable, :confirmable,
5
+ # :lockable, :timeoutable and :omniauthable
6
+ devise :database_authenticatable, #:registerable,
7
+ :recoverable, :rememberable, :trackable, :validatable
8
+
9
+ # Setup accessible (or protected) attributes for your model
10
+ attr_accessible :email, :password, :password_confirmation, :remember_me
11
+ # attr_accessible :title, :body
12
+ end
13
+ end
@@ -0,0 +1,44 @@
1
+ # encoding: utf-8
2
+ module JcCms
3
+ class CkeditorAttachmentFileUploader < CarrierWave::Uploader::Base
4
+ include Ckeditor::Backend::CarrierWave
5
+
6
+ # Include RMagick or ImageScience support:
7
+ # include CarrierWave::RMagick
8
+ # include CarrierWave::MiniMagick
9
+ # include CarrierWave::ImageScience
10
+
11
+ # Choose what kind of storage to use for this uploader:
12
+ storage :file
13
+
14
+ # Override the directory where uploaded files will be stored.
15
+ # This is a sensible default for uploaders that are meant to be mounted:
16
+ def store_dir
17
+ "uploads/ckeditor/attachments/#{model.id}"
18
+ end
19
+
20
+ # Provide a default URL as a default if there hasn't been a file uploaded:
21
+ # def default_url
22
+ # "/images/fallback/" + [version_name, "default.png"].compact.join('_')
23
+ # end
24
+
25
+ # Process files as they are uploaded:
26
+ # process :scale => [200, 300]
27
+ #
28
+ # def scale(width, height)
29
+ # # do something
30
+ # end
31
+
32
+ # Add a white list of extensions which are allowed to be uploaded.
33
+ # For images you might use something like this:
34
+ def extension_white_list
35
+ Ckeditor.attachment_file_types
36
+ end
37
+
38
+ # Override the filename of the uploaded files:
39
+ # Avoid using model.id or version_name here, see uploader/store.rb for details.
40
+ # def filename
41
+ # "something.jpg" if original_filename
42
+ # end
43
+ end
44
+ end
@@ -0,0 +1,55 @@
1
+ # encoding: utf-8
2
+ module JcCms
3
+ class CkeditorPictureUploader < CarrierWave::Uploader::Base
4
+ include Ckeditor::Backend::CarrierWave
5
+
6
+ # Include RMagick or ImageScience support:
7
+ # include CarrierWave::RMagick
8
+ include CarrierWave::MiniMagick
9
+ # include CarrierWave::ImageScience
10
+
11
+ # Choose what kind of storage to use for this uploader:
12
+ storage :file
13
+
14
+ # Override the directory where uploaded files will be stored.
15
+ # This is a sensible default for uploaders that are meant to be mounted:
16
+ def store_dir
17
+ "uploads/ckeditor/pictures/#{model.id}"
18
+ end
19
+
20
+ # Provide a default URL as a default if there hasn't been a file uploaded:
21
+ # def default_url
22
+ # "/images/fallback/" + [version_name, "default.png"].compact.join('_')
23
+ # end
24
+
25
+ # Process files as they are uploaded:
26
+ # process :scale => [200, 300]
27
+ #
28
+ # def scale(width, height)
29
+ # # do something
30
+ # end
31
+
32
+ process :read_dimensions
33
+
34
+ # Create different versions of your uploaded files:
35
+ version :thumb do
36
+ process :resize_to_fill => [118, 100]
37
+ end
38
+
39
+ version :content do
40
+ process :resize_to_limit => [800, 800]
41
+ end
42
+
43
+ # Add a white list of extensions which are allowed to be uploaded.
44
+ # For images you might use something like this:
45
+ def extension_white_list
46
+ Ckeditor.image_file_types
47
+ end
48
+
49
+ # Override the filename of the uploaded files:
50
+ # Avoid using model.id or version_name here, see uploader/store.rb for details.
51
+ # def filename
52
+ # "something.jpg" if original_filename
53
+ # end
54
+ end
55
+ end
@@ -0,0 +1,14 @@
1
+ = simple_form_for @page, :url => url do |f|
2
+ = f.input :name
3
+ = f.input :content, :as => :ckeditor, :label => false, :input_html => { :toolbar => 'Full' }
4
+ = f.input :active, item_wrapper_class: 'inline'
5
+ = f.input :position
6
+ = f.association :page
7
+ = f.input :meta_title, :input_html => { :style => "width: 50%" }
8
+ = f.input :meta_description, :input_html => { :style => "width: 50%" }
9
+ = f.input :meta_keywords, :input_html => { :style => "width: 50%" }
10
+ = f.button :submit, t("actions.save"), :class => "btn btn-success"
11
+
12
+ - content_for :head do
13
+ = javascript_include_tag 'ckeditor/ckeditor'
14
+
@@ -0,0 +1,2 @@
1
+ %h1= t("controllers.dashboard.pages.edit")
2
+ = render :partial => "form", :locals => { :url => dashboard_page_path }
@@ -0,0 +1,25 @@
1
+ .pull-right
2
+ %p
3
+ = link_to t("controllers.dashboard.pages.add_new"), new_dashboard_page_path, :class => "btn btn-primary"
4
+ %table.table.table-striped
5
+ %tr
6
+ %th= t("simple_form.labels.page.name")
7
+ %th= t("simple_form.labels.page.active")
8
+ %th= t("simple_form.labels.page.page")
9
+ %th= t("simple_form.labels.page.position")
10
+ %th= t("actions.actions")
11
+ %th
12
+ %th
13
+ - @pages.each do |p|
14
+ %tr
15
+ %td= p.name
16
+ %td
17
+ - if p.active
18
+ %i.icon.icon-ok
19
+ - else
20
+ = " - "
21
+ %td= p.page
22
+ %td= p.position
23
+ %td= link_to t("actions.show"), dashboard_page_path(p)
24
+ %td= link_to t("actions.edit"), edit_dashboard_page_path(p)
25
+ %td= link_to t("actions.delete"), dashboard_page_path(p), method: :delete
@@ -0,0 +1,2 @@
1
+ %h1= t("controllers.dashboard.pages.new")
2
+ = render :partial => "form", :locals => { :url => dashboard_pages_path }
@@ -0,0 +1,2 @@
1
+ %h3= @page.name
2
+ = raw @page.content
@@ -0,0 +1 @@
1
+ = render_cell :pages_menu, :show
@@ -0,0 +1,15 @@
1
+ <h2>Resend confirmation instructions</h2>
2
+
3
+ <%= simple_form_for(resource, :as => resource_name, :url => confirmation_path(resource_name), :html => { :method => :post }) do |f| %>
4
+ <%= f.error_notification %>
5
+
6
+ <div class="form-inputs">
7
+ <%= f.input :email, :required => true %>
8
+ </div>
9
+
10
+ <div class="form-actions">
11
+ <%= f.button :submit, "Resend confirmation instructions" %>
12
+ </div>
13
+ <% end %>
14
+
15
+ <%= render "devise/shared/links" %>
@@ -0,0 +1,5 @@
1
+ <p>Welcome <%= @resource.email %>!</p>
2
+
3
+ <p>You can confirm your account email through the link below:</p>
4
+
5
+ <p><%= link_to 'Confirm my account', confirmation_url(@resource, :confirmation_token => @resource.confirmation_token) %></p>
@@ -0,0 +1,8 @@
1
+ <p>Hello <%= @resource.email %>!</p>
2
+
3
+ <p>Someone has requested a link to change your password, and you can do this through the link below.</p>
4
+
5
+ <p><%= link_to 'Change my password', edit_password_url(@resource, :reset_password_token => @resource.reset_password_token) %></p>
6
+
7
+ <p>If you didn't request this, please ignore this email.</p>
8
+ <p>Your password won't change until you access the link above and create a new one.</p>
@@ -0,0 +1,7 @@
1
+ <p>Hello <%= @resource.email %>!</p>
2
+
3
+ <p>Your account has been locked due to an excessive amount of unsuccessful sign in attempts.</p>
4
+
5
+ <p>Click the link below to unlock your account:</p>
6
+
7
+ <p><%= link_to 'Unlock my account', unlock_url(@resource, :unlock_token => @resource.unlock_token) %></p>
@@ -0,0 +1,19 @@
1
+ <h2>Change your password</h2>
2
+
3
+ <%= simple_form_for(resource, :as => resource_name, :url => password_path(resource_name), :html => { :method => :put }) do |f| %>
4
+ <%= f.error_notification %>
5
+
6
+ <%= f.input :reset_password_token, :as => :hidden %>
7
+ <%= f.full_error :reset_password_token %>
8
+
9
+ <div class="form-inputs">
10
+ <%= f.input :password, :label => "New password", :required => true %>
11
+ <%= f.input :password_confirmation, :label => "Confirm your new password", :required => true %>
12
+ </div>
13
+
14
+ <div class="form-actions">
15
+ <%= f.button :submit, "Change my password" %>
16
+ </div>
17
+ <% end %>
18
+
19
+ <%= render "devise/shared/links" %>
@@ -0,0 +1,15 @@
1
+ <h2>Forgot your password?</h2>
2
+
3
+ <%= simple_form_for(resource, :as => resource_name, :url => password_path(resource_name), :html => { :method => :post }) do |f| %>
4
+ <%= f.error_notification %>
5
+
6
+ <div class="form-inputs">
7
+ <%= f.input :email, :required => true %>
8
+ </div>
9
+
10
+ <div class="form-actions">
11
+ <%= f.button :submit, "Send me reset password instructions" %>
12
+ </div>
13
+ <% end %>
14
+
15
+ <%= render "devise/shared/links" %>
@@ -0,0 +1,22 @@
1
+ <h2>Edit <%= resource_name.to_s.humanize %></h2>
2
+
3
+ <%= simple_form_for(resource, :as => resource_name, :url => registration_path(resource_name), :html => { :method => :put }) do |f| %>
4
+ <%= f.error_notification %>
5
+
6
+ <div class="form-inputs">
7
+ <%= f.input :email, :required => true, :autofocus => true %>
8
+ <%= f.input :password, :autocomplete => "off", :hint => "leave it blank if you don't want to change it", :required => false %>
9
+ <%= f.input :password_confirmation, :required => false %>
10
+ <%= f.input :current_password, :hint => "we need your current password to confirm your changes", :required => true %>
11
+ </div>
12
+
13
+ <div class="form-actions">
14
+ <%= f.button :submit, "Update" %>
15
+ </div>
16
+ <% end %>
17
+
18
+ <h3>Cancel my account</h3>
19
+
20
+ <p>Unhappy? <%= link_to "Cancel my account", registration_path(resource_name), :data => { :confirm => "Are you sure?" }, :method => :delete %>.</p>
21
+
22
+ <%= link_to "Back", :back %>
@@ -0,0 +1,17 @@
1
+ <h2>Sign up</h2>
2
+
3
+ <%= simple_form_for(resource, :as => resource_name, :url => registration_path(resource_name)) do |f| %>
4
+ <%= f.error_notification %>
5
+
6
+ <div class="form-inputs">
7
+ <%= f.input :email, :required => true, :autofocus => true %>
8
+ <%= f.input :password, :required => true %>
9
+ <%= f.input :password_confirmation, :required => true %>
10
+ </div>
11
+
12
+ <div class="form-actions">
13
+ <%= f.button :submit, "Sign up" %>
14
+ </div>
15
+ <% end %>
16
+
17
+ <%= render "devise/shared/links" %>
@@ -0,0 +1,13 @@
1
+ <h2>Zaloguj się</h2>
2
+
3
+ <%= simple_form_for(resource, :as => resource_name, :url => session_path(resource_name)) do |f| %>
4
+ <div class="form-inputs">
5
+ <%= f.input :email, :required => false, :autofocus => true %>
6
+ <%= f.input :password, :required => false, :label => "Hasło" %>
7
+ <%#= f.input :remember_me, :as => :boolean if devise_mapping.rememberable? %>
8
+ </div>
9
+
10
+ <%= f.button :submit, "Zaloguj się", :class => "btn btn-primary" %>
11
+ <% end %>
12
+
13
+ <%#= render "devise/shared/links" %>
@@ -0,0 +1,25 @@
1
+ <%- if controller_name != 'sessions' %>
2
+ <%= link_to "Sign in", new_session_path(resource_name) %><br />
3
+ <% end -%>
4
+
5
+ <%- if devise_mapping.registerable? && controller_name != 'registrations' %>
6
+ <%= link_to "Sign up", new_registration_path(resource_name) %><br />
7
+ <% end -%>
8
+
9
+ <%- if devise_mapping.recoverable? && controller_name != 'passwords' %>
10
+ <%= link_to "Forgot your password?", new_password_path(resource_name) %><br />
11
+ <% end -%>
12
+
13
+ <%- if devise_mapping.confirmable? && controller_name != 'confirmations' %>
14
+ <%= link_to "Didn't receive confirmation instructions?", new_confirmation_path(resource_name) %><br />
15
+ <% end -%>
16
+
17
+ <%- if devise_mapping.lockable? && resource_class.unlock_strategy_enabled?(:email) && controller_name != 'unlocks' %>
18
+ <%= link_to "Didn't receive unlock instructions?", new_unlock_path(resource_name) %><br />
19
+ <% end -%>
20
+
21
+ <%- if devise_mapping.omniauthable? %>
22
+ <%- resource_class.omniauth_providers.each do |provider| %>
23
+ <%= link_to "Sign in with #{provider.to_s.titleize}", omniauth_authorize_path(resource_name, provider) %><br />
24
+ <% end -%>
25
+ <% end -%>
@@ -0,0 +1,15 @@
1
+ <h2>Resend unlock instructions</h2>
2
+
3
+ <%= simple_form_for(resource, :as => resource_name, :url => unlock_path(resource_name), :html => { :method => :post }) do |f| %>
4
+ <%= f.error_notification %>
5
+
6
+ <div class="form-inputs">
7
+ <%= f.input :email, :required => true %>
8
+ </div>
9
+
10
+ <div class="form-actions">
11
+ <%= f.button :submit, "Resend unlock instructions" %>
12
+ </div>
13
+ <% end %>
14
+
15
+ <%= render "devise/shared/links" %>
@@ -0,0 +1,90 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="utf-8">
5
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1">
6
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
7
+ <title><%= content_for?(:title) ? yield(:title) : "JcCms" %></title>
8
+ <%= csrf_meta_tags %>
9
+ <%= yield(:head) %>
10
+
11
+ <!-- Le HTML5 shim, for IE6-8 support of HTML elements -->
12
+ <!--[if lt IE 9]>
13
+ <script src="http://html5shim.googlecode.com/svn/trunk/html5.js" type="text/javascript"></script>
14
+ <![endif]-->
15
+
16
+ <%= stylesheet_link_tag "application", :media => "all" %>
17
+
18
+ <!-- For third-generation iPad with high-resolution Retina display: -->
19
+ <!-- Size should be 144 x 144 pixels -->
20
+ <%= favicon_link_tag 'images/apple-touch-icon-144x144-precomposed.png', :rel => 'apple-touch-icon-precomposed', :type => 'image/png', :sizes => '144x144' %>
21
+
22
+ <!-- For iPhone with high-resolution Retina display: -->
23
+ <!-- Size should be 114 x 114 pixels -->
24
+ <%= favicon_link_tag 'images/apple-touch-icon-114x114-precomposed.png', :rel => 'apple-touch-icon-precomposed', :type => 'image/png', :sizes => '114x114' %>
25
+
26
+ <!-- For first- and second-generation iPad: -->
27
+ <!-- Size should be 72 x 72 pixels -->
28
+ <%= favicon_link_tag 'images/apple-touch-icon-72x72-precomposed.png', :rel => 'apple-touch-icon-precomposed', :type => 'image/png', :sizes => '72x72' %>
29
+
30
+ <!-- For non-Retina iPhone, iPod Touch, and Android 2.1+ devices: -->
31
+ <!-- Size should be 57 x 57 pixels -->
32
+ <%= favicon_link_tag 'images/apple-touch-icon-precomposed.png', :rel => 'apple-touch-icon-precomposed', :type => 'image/png' %>
33
+
34
+ <!-- For all other devices -->
35
+ <!-- Size should be 32 x 32 pixels -->
36
+ <%= favicon_link_tag 'images/favicon.ico', :rel => 'shortcut icon' %>
37
+ </head>
38
+ <body>
39
+
40
+ <div class="navbar navbar-fixed-top">
41
+ <div class="navbar-inner">
42
+ <div class="container-fluid">
43
+ <a class="btn btn-navbar" data-target=".nav-collapse" data-toggle="collapse">
44
+ <span class="icon-bar"></span>
45
+ <span class="icon-bar"></span>
46
+ <span class="icon-bar"></span>
47
+ </a>
48
+ <a class="brand" href="#">JcCms</a>
49
+ <div class="container-fluid nav-collapse">
50
+ <ul class="nav">
51
+ <li><%= link_to "Link1", "/path1" %></li>
52
+ <li><%= link_to "Link2", "/path2" %></li>
53
+ <li><%= link_to "Link3", "/path3" %></li>
54
+ </ul>
55
+ </div><!--/.nav-collapse -->
56
+ </div>
57
+ </div>
58
+ </div>
59
+
60
+ <div class="container-fluid">
61
+ <div class="row-fluid">
62
+ <div class="span3">
63
+ <div class="well sidebar-nav">
64
+ <ul class="nav nav-list">
65
+ <li class="nav-header">Sidebar</li>
66
+ <li><%= link_to "Link1", "/path1" %></li>
67
+ <li><%= link_to "Link2", "/path2" %></li>
68
+ <li><%= link_to "Link3", "/path3" %></li>
69
+ </ul>
70
+ </div><!--/.well -->
71
+ </div><!--/span-->
72
+ <div class="span9">
73
+ <%= bootstrap_flash %>
74
+ <%= yield %>
75
+ </div>
76
+ </div><!--/row-->
77
+
78
+ <footer>
79
+ <p>&copy; Company 2012</p>
80
+ </footer>
81
+
82
+ </div> <!-- /container -->
83
+
84
+ <!-- Javascripts
85
+ ================================================== -->
86
+ <!-- Placed at the end of the document so the pages load faster -->
87
+ <%= javascript_include_tag "application" %>
88
+
89
+ </body>
90
+ </html>