sunrise-core 0.1.0

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 (268) hide show
  1. data/README.rdoc +46 -0
  2. data/Rakefile +44 -0
  3. data/app/controllers/manage/assets_controller.rb +70 -0
  4. data/app/controllers/manage/base_controller.rb +24 -0
  5. data/app/controllers/manage/pages_controller.rb +37 -0
  6. data/app/controllers/manage/settings_controller.rb +24 -0
  7. data/app/controllers/manage/structures_controller.rb +45 -0
  8. data/app/controllers/manage/users_controller.rb +78 -0
  9. data/app/controllers/pages_controller.rb +22 -0
  10. data/app/views/layouts/manage.html.erb +40 -0
  11. data/app/views/manage/assets/_collection.html.erb +32 -0
  12. data/app/views/manage/assets/_picture.html.erb +10 -0
  13. data/app/views/manage/assets/_swfscript.html.erb +51 -0
  14. data/app/views/manage/headers/_form.html.erb +14 -0
  15. data/app/views/manage/pages/_form.html.erb +11 -0
  16. data/app/views/manage/pages/edit.html.erb +6 -0
  17. data/app/views/manage/pages/new.html.erb +6 -0
  18. data/app/views/manage/settings/_form.html.erb +22 -0
  19. data/app/views/manage/settings/index.html.erb +14 -0
  20. data/app/views/manage/shared/_head.html.erb +41 -0
  21. data/app/views/manage/shared/_locale.html.erb +8 -0
  22. data/app/views/manage/shared/_notice.html.erb +7 -0
  23. data/app/views/manage/shared/_panel.html.erb +34 -0
  24. data/app/views/manage/structures/_form.html.erb +28 -0
  25. data/app/views/manage/structures/_structure.html.erb +34 -0
  26. data/app/views/manage/structures/edit.html.erb +6 -0
  27. data/app/views/manage/structures/index.html.erb +51 -0
  28. data/app/views/manage/structures/new.html.erb +6 -0
  29. data/app/views/manage/users/_form.html.erb +15 -0
  30. data/app/views/manage/users/_model_filter.html.erb +33 -0
  31. data/app/views/manage/users/_user.html.erb +55 -0
  32. data/app/views/manage/users/edit.html.erb +6 -0
  33. data/app/views/manage/users/index.html.erb +36 -0
  34. data/app/views/manage/users/new.html.erb +6 -0
  35. data/app/views/manage/users/show.html.erb +19 -0
  36. data/config/locales/defaults/en.yml +149 -0
  37. data/config/locales/defaults/pluralize.rb +6 -0
  38. data/config/locales/defaults/ru.yml +170 -0
  39. data/config/locales/defaults/uk.yml +238 -0
  40. data/config/locales/devise.en.yml +39 -0
  41. data/config/locales/devise.ru.yml +41 -0
  42. data/config/locales/devise.uk.yml +41 -0
  43. data/config/locales/manage/en.yml +248 -0
  44. data/config/locales/manage/ru.yml +248 -0
  45. data/config/locales/manage/uk.yml +248 -0
  46. data/config/routes.rb +24 -0
  47. data/lib/generators/sunrise/USAGE +7 -0
  48. data/lib/generators/sunrise/install_generator.rb +120 -0
  49. data/lib/generators/sunrise/templates/config/application.yml +4 -0
  50. data/lib/generators/sunrise/templates/config/database.yml +34 -0
  51. data/lib/generators/sunrise/templates/config/logrotate-config +9 -0
  52. data/lib/generators/sunrise/templates/config/nginx-config-passenger +51 -0
  53. data/lib/generators/sunrise/templates/config/seeds.rb +25 -0
  54. data/lib/generators/sunrise/templates/config/sunrise.rb +7 -0
  55. data/lib/generators/sunrise/templates/helpers/manage/assets_helper.rb +16 -0
  56. data/lib/generators/sunrise/templates/helpers/manage/base_helper.rb +81 -0
  57. data/lib/generators/sunrise/templates/helpers/manage/pages_helper.rb +2 -0
  58. data/lib/generators/sunrise/templates/helpers/manage/settings_helper.rb +2 -0
  59. data/lib/generators/sunrise/templates/helpers/manage/structures_helper.rb +12 -0
  60. data/lib/generators/sunrise/templates/helpers/manage/users_helper.rb +6 -0
  61. data/lib/generators/sunrise/templates/images/manage/add_post_bot.gif +0 -0
  62. data/lib/generators/sunrise/templates/images/manage/add_post_top.gif +0 -0
  63. data/lib/generators/sunrise/templates/images/manage/add_white_bot.gif +0 -0
  64. data/lib/generators/sunrise/templates/images/manage/add_white_top.gif +0 -0
  65. data/lib/generators/sunrise/templates/images/manage/arrow.png +0 -0
  66. data/lib/generators/sunrise/templates/images/manage/back_but_lc.gif +0 -0
  67. data/lib/generators/sunrise/templates/images/manage/back_but_rc.gif +0 -0
  68. data/lib/generators/sunrise/templates/images/manage/bot_corn.gif +0 -0
  69. data/lib/generators/sunrise/templates/images/manage/bot_duo_corn.gif +0 -0
  70. data/lib/generators/sunrise/templates/images/manage/but_bg.png +0 -0
  71. data/lib/generators/sunrise/templates/images/manage/but_block_lc.gif +0 -0
  72. data/lib/generators/sunrise/templates/images/manage/but_block_rc.gif +0 -0
  73. data/lib/generators/sunrise/templates/images/manage/but_freze_lc.gif +0 -0
  74. data/lib/generators/sunrise/templates/images/manage/but_freze_rc.gif +0 -0
  75. data/lib/generators/sunrise/templates/images/manage/but_gr.gif +0 -0
  76. data/lib/generators/sunrise/templates/images/manage/but_gr_l.gif +0 -0
  77. data/lib/generators/sunrise/templates/images/manage/but_gr_r.gif +0 -0
  78. data/lib/generators/sunrise/templates/images/manage/but_search.gif +0 -0
  79. data/lib/generators/sunrise/templates/images/manage/but_unfreze_lc.gif +0 -0
  80. data/lib/generators/sunrise/templates/images/manage/but_unfreze_rc.gif +0 -0
  81. data/lib/generators/sunrise/templates/images/manage/button_add_foto.gif +0 -0
  82. data/lib/generators/sunrise/templates/images/manage/button_add_foto_ru.gif +0 -0
  83. data/lib/generators/sunrise/templates/images/manage/button_add_foto_ua.gif +0 -0
  84. data/lib/generators/sunrise/templates/images/manage/button_add_foto_uk.gif +0 -0
  85. data/lib/generators/sunrise/templates/images/manage/cancelbutton.gif +0 -0
  86. data/lib/generators/sunrise/templates/images/manage/dark_arr.gif +0 -0
  87. data/lib/generators/sunrise/templates/images/manage/dark_arr_left.gif +0 -0
  88. data/lib/generators/sunrise/templates/images/manage/dark_cross_ico.gif +0 -0
  89. data/lib/generators/sunrise/templates/images/manage/dot.gif +0 -0
  90. data/lib/generators/sunrise/templates/images/manage/duo_bg.gif +0 -0
  91. data/lib/generators/sunrise/templates/images/manage/duo_bg_small.gif +0 -0
  92. data/lib/generators/sunrise/templates/images/manage/duo_bg_small_blocked.gif +0 -0
  93. data/lib/generators/sunrise/templates/images/manage/duo_bg_small_frozed.gif +0 -0
  94. data/lib/generators/sunrise/templates/images/manage/duo_bg_small_notact.gif +0 -0
  95. data/lib/generators/sunrise/templates/images/manage/duo_bot_small.gif +0 -0
  96. data/lib/generators/sunrise/templates/images/manage/duo_bot_small_blocked.gif +0 -0
  97. data/lib/generators/sunrise/templates/images/manage/duo_bot_small_frozed.gif +0 -0
  98. data/lib/generators/sunrise/templates/images/manage/duo_bot_small_notact.gif +0 -0
  99. data/lib/generators/sunrise/templates/images/manage/duo_top_small.gif +0 -0
  100. data/lib/generators/sunrise/templates/images/manage/duo_top_small_blocked.gif +0 -0
  101. data/lib/generators/sunrise/templates/images/manage/duo_top_small_frozed.gif +0 -0
  102. data/lib/generators/sunrise/templates/images/manage/duo_top_small_notact.gif +0 -0
  103. data/lib/generators/sunrise/templates/images/manage/edit_white_top.gif +0 -0
  104. data/lib/generators/sunrise/templates/images/manage/empty.gif +0 -0
  105. data/lib/generators/sunrise/templates/images/manage/filter_bot_bg.gif +0 -0
  106. data/lib/generators/sunrise/templates/images/manage/filter_top_bg.gif +0 -0
  107. data/lib/generators/sunrise/templates/images/manage/flag_en.gif +0 -0
  108. data/lib/generators/sunrise/templates/images/manage/flag_en_nonact.gif +0 -0
  109. data/lib/generators/sunrise/templates/images/manage/flag_ru.gif +0 -0
  110. data/lib/generators/sunrise/templates/images/manage/flag_ru_nonact.gif +0 -0
  111. data/lib/generators/sunrise/templates/images/manage/flag_ua.gif +0 -0
  112. data/lib/generators/sunrise/templates/images/manage/flag_ua_nonact.gif +0 -0
  113. data/lib/generators/sunrise/templates/images/manage/foto.jpg +0 -0
  114. data/lib/generators/sunrise/templates/images/manage/ico_add.gif +0 -0
  115. data/lib/generators/sunrise/templates/images/manage/ico_del.gif +0 -0
  116. data/lib/generators/sunrise/templates/images/manage/ico_down.gif +0 -0
  117. data/lib/generators/sunrise/templates/images/manage/ico_edit.gif +0 -0
  118. data/lib/generators/sunrise/templates/images/manage/ico_settings.gif +0 -0
  119. data/lib/generators/sunrise/templates/images/manage/ico_up.gif +0 -0
  120. data/lib/generators/sunrise/templates/images/manage/input_bg.gif +0 -0
  121. data/lib/generators/sunrise/templates/images/manage/l_but_corn.gif +0 -0
  122. data/lib/generators/sunrise/templates/images/manage/minimise_but.gif +0 -0
  123. data/lib/generators/sunrise/templates/images/manage/mp3.png +0 -0
  124. data/lib/generators/sunrise/templates/images/manage/page_arr_hover.png +0 -0
  125. data/lib/generators/sunrise/templates/images/manage/page_next_arr.gif +0 -0
  126. data/lib/generators/sunrise/templates/images/manage/page_num_hover.gif +0 -0
  127. data/lib/generators/sunrise/templates/images/manage/page_prev_arr.gif +0 -0
  128. data/lib/generators/sunrise/templates/images/manage/panel/l_but_corn.gif +0 -0
  129. data/lib/generators/sunrise/templates/images/manage/panel/maximise_but.gif +0 -0
  130. data/lib/generators/sunrise/templates/images/manage/panel/r_but_corn.gif +0 -0
  131. data/lib/generators/sunrise/templates/images/manage/panel/top_menu_arr.gif +0 -0
  132. data/lib/generators/sunrise/templates/images/manage/panel/user_pic.gif +0 -0
  133. data/lib/generators/sunrise/templates/images/manage/preloader.gif +0 -0
  134. data/lib/generators/sunrise/templates/images/manage/r_but_corn.gif +0 -0
  135. data/lib/generators/sunrise/templates/images/manage/select_bg.gif +0 -0
  136. data/lib/generators/sunrise/templates/images/manage/select_corn.gif +0 -0
  137. data/lib/generators/sunrise/templates/images/manage/struct_corn_lg.gif +0 -0
  138. data/lib/generators/sunrise/templates/images/manage/struct_corn_llg.gif +0 -0
  139. data/lib/generators/sunrise/templates/images/manage/struct_corn_lw.gif +0 -0
  140. data/lib/generators/sunrise/templates/images/manage/struct_corn_rg.gif +0 -0
  141. data/lib/generators/sunrise/templates/images/manage/struct_corn_rlg.gif +0 -0
  142. data/lib/generators/sunrise/templates/images/manage/struct_corn_rw.gif +0 -0
  143. data/lib/generators/sunrise/templates/images/manage/tab_gl.gif +0 -0
  144. data/lib/generators/sunrise/templates/images/manage/tab_gr.gif +0 -0
  145. data/lib/generators/sunrise/templates/images/manage/tab_wl.gif +0 -0
  146. data/lib/generators/sunrise/templates/images/manage/tab_wr.gif +0 -0
  147. data/lib/generators/sunrise/templates/images/manage/top_corn.gif +0 -0
  148. data/lib/generators/sunrise/templates/images/manage/top_duo_corn.gif +0 -0
  149. data/lib/generators/sunrise/templates/images/manage/top_menu_arr.gif +0 -0
  150. data/lib/generators/sunrise/templates/images/manage/transp_cross.png +0 -0
  151. data/lib/generators/sunrise/templates/images/manage/upload_progress.gif +0 -0
  152. data/lib/generators/sunrise/templates/images/manage/user_act_lc.gif +0 -0
  153. data/lib/generators/sunrise/templates/images/manage/user_act_rc.gif +0 -0
  154. data/lib/generators/sunrise/templates/images/manage/user_ico.gif +0 -0
  155. data/lib/generators/sunrise/templates/images/manage/user_pic.gif +0 -0
  156. data/lib/generators/sunrise/templates/images/manage/user_pic_small.gif +0 -0
  157. data/lib/generators/sunrise/templates/images/manage/user_pic_thumb.gif +0 -0
  158. data/lib/generators/sunrise/templates/javascripts/datepicker/jquery-ui-i18n.js +1176 -0
  159. data/lib/generators/sunrise/templates/javascripts/datepicker/jquery.ui.datepicker-ru.js +37 -0
  160. data/lib/generators/sunrise/templates/javascripts/datepicker/jquery.ui.datepicker-uk.js +37 -0
  161. data/lib/generators/sunrise/templates/javascripts/jquery-ui-timepicker-addon.js +911 -0
  162. data/lib/generators/sunrise/templates/javascripts/jquery.cookie.js +97 -0
  163. data/lib/generators/sunrise/templates/javascripts/jquery.fancybox-1.3.4.pack.js +46 -0
  164. data/lib/generators/sunrise/templates/javascripts/jquery.tmpl.min.js +10 -0
  165. data/lib/generators/sunrise/templates/javascripts/manage.js +290 -0
  166. data/lib/generators/sunrise/templates/javascripts/preloader.js +47 -0
  167. data/lib/generators/sunrise/templates/javascripts/swfupload/fileprogress.js +114 -0
  168. data/lib/generators/sunrise/templates/javascripts/swfupload/handlers.js +164 -0
  169. data/lib/generators/sunrise/templates/javascripts/swfupload/swfupload.js +1134 -0
  170. data/lib/generators/sunrise/templates/javascripts/swfupload/swfupload.queue.js +98 -0
  171. data/lib/generators/sunrise/templates/javascripts/swfupload/swfupload.swf +0 -0
  172. data/lib/generators/sunrise/templates/migrate/create_assets.rb +28 -0
  173. data/lib/generators/sunrise/templates/migrate/create_headers.rb +20 -0
  174. data/lib/generators/sunrise/templates/migrate/create_pages.rb +17 -0
  175. data/lib/generators/sunrise/templates/migrate/create_roles.rb +16 -0
  176. data/lib/generators/sunrise/templates/migrate/create_structures.rb +27 -0
  177. data/lib/generators/sunrise/templates/migrate/create_users.rb +29 -0
  178. data/lib/generators/sunrise/templates/models/defaults/ability.rb +38 -0
  179. data/lib/generators/sunrise/templates/models/defaults/asset.rb +7 -0
  180. data/lib/generators/sunrise/templates/models/defaults/attachment_file.rb +33 -0
  181. data/lib/generators/sunrise/templates/models/defaults/avatar.rb +36 -0
  182. data/lib/generators/sunrise/templates/models/defaults/header.rb +5 -0
  183. data/lib/generators/sunrise/templates/models/defaults/page.rb +5 -0
  184. data/lib/generators/sunrise/templates/models/defaults/picture.rb +34 -0
  185. data/lib/generators/sunrise/templates/models/defaults/position_type.rb +7 -0
  186. data/lib/generators/sunrise/templates/models/defaults/role.rb +20 -0
  187. data/lib/generators/sunrise/templates/models/defaults/role_type.rb +8 -0
  188. data/lib/generators/sunrise/templates/models/defaults/structure.rb +11 -0
  189. data/lib/generators/sunrise/templates/models/defaults/structure_type.rb +9 -0
  190. data/lib/generators/sunrise/templates/models/defaults/user.rb +51 -0
  191. data/lib/generators/sunrise/templates/stylesheets/application.css +1 -0
  192. data/lib/generators/sunrise/templates/stylesheets/fancybox/images/blank.gif +0 -0
  193. data/lib/generators/sunrise/templates/stylesheets/fancybox/images/fancy_close.png +0 -0
  194. data/lib/generators/sunrise/templates/stylesheets/fancybox/images/fancy_loading.png +0 -0
  195. data/lib/generators/sunrise/templates/stylesheets/fancybox/images/fancy_nav_left.png +0 -0
  196. data/lib/generators/sunrise/templates/stylesheets/fancybox/images/fancy_nav_right.png +0 -0
  197. data/lib/generators/sunrise/templates/stylesheets/fancybox/images/fancy_shadow_e.png +0 -0
  198. data/lib/generators/sunrise/templates/stylesheets/fancybox/images/fancy_shadow_n.png +0 -0
  199. data/lib/generators/sunrise/templates/stylesheets/fancybox/images/fancy_shadow_ne.png +0 -0
  200. data/lib/generators/sunrise/templates/stylesheets/fancybox/images/fancy_shadow_nw.png +0 -0
  201. data/lib/generators/sunrise/templates/stylesheets/fancybox/images/fancy_shadow_s.png +0 -0
  202. data/lib/generators/sunrise/templates/stylesheets/fancybox/images/fancy_shadow_se.png +0 -0
  203. data/lib/generators/sunrise/templates/stylesheets/fancybox/images/fancy_shadow_sw.png +0 -0
  204. data/lib/generators/sunrise/templates/stylesheets/fancybox/images/fancy_shadow_w.png +0 -0
  205. data/lib/generators/sunrise/templates/stylesheets/fancybox/images/fancy_title_left.png +0 -0
  206. data/lib/generators/sunrise/templates/stylesheets/fancybox/images/fancy_title_main.png +0 -0
  207. data/lib/generators/sunrise/templates/stylesheets/fancybox/images/fancy_title_over.png +0 -0
  208. data/lib/generators/sunrise/templates/stylesheets/fancybox/images/fancy_title_right.png +0 -0
  209. data/lib/generators/sunrise/templates/stylesheets/fancybox/images/fancybox-x.png +0 -0
  210. data/lib/generators/sunrise/templates/stylesheets/fancybox/images/fancybox-y.png +0 -0
  211. data/lib/generators/sunrise/templates/stylesheets/fancybox/images/fancybox.png +0 -0
  212. data/lib/generators/sunrise/templates/stylesheets/fancybox/jquery.fancybox-1.3.4.css +359 -0
  213. data/lib/generators/sunrise/templates/stylesheets/manage/ie.css +16 -0
  214. data/lib/generators/sunrise/templates/stylesheets/manage/main.css +1074 -0
  215. data/lib/generators/sunrise/templates/stylesheets/manage/panel.css +126 -0
  216. data/lib/generators/sunrise/templates/stylesheets/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
  217. data/lib/generators/sunrise/templates/stylesheets/smoothness/images/ui-bg_flat_75_ffffff_40x100.png +0 -0
  218. data/lib/generators/sunrise/templates/stylesheets/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png +0 -0
  219. data/lib/generators/sunrise/templates/stylesheets/smoothness/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
  220. data/lib/generators/sunrise/templates/stylesheets/smoothness/images/ui-bg_glass_75_dadada_1x400.png +0 -0
  221. data/lib/generators/sunrise/templates/stylesheets/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png +0 -0
  222. data/lib/generators/sunrise/templates/stylesheets/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png +0 -0
  223. data/lib/generators/sunrise/templates/stylesheets/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png +0 -0
  224. data/lib/generators/sunrise/templates/stylesheets/smoothness/images/ui-icons_222222_256x240.png +0 -0
  225. data/lib/generators/sunrise/templates/stylesheets/smoothness/images/ui-icons_2e83ff_256x240.png +0 -0
  226. data/lib/generators/sunrise/templates/stylesheets/smoothness/images/ui-icons_454545_256x240.png +0 -0
  227. data/lib/generators/sunrise/templates/stylesheets/smoothness/images/ui-icons_888888_256x240.png +0 -0
  228. data/lib/generators/sunrise/templates/stylesheets/smoothness/images/ui-icons_cd0a0a_256x240.png +0 -0
  229. data/lib/generators/sunrise/templates/stylesheets/smoothness/jquery-ui-1.8.6.custom.css +572 -0
  230. data/lib/generators/sunrise/templates/sweepers/page_sweeper.rb +22 -0
  231. data/lib/generators/sunrise/templates/sweepers/structure_sweeper.rb +29 -0
  232. data/lib/generators/sunrise/templates/sweepers/user_sweeper.rb +17 -0
  233. data/lib/generators/sunrise/templates/views/layouts/application.html.erb +37 -0
  234. data/lib/generators/sunrise/templates/views/pages/show.html.erb +2 -0
  235. data/lib/generators/sunrise/templates/views/shared/_notice.html.erb +17 -0
  236. data/lib/sunrise/controllers/head_options.rb +40 -0
  237. data/lib/sunrise/core.rb +80 -0
  238. data/lib/sunrise/core_ext/array.rb +22 -0
  239. data/lib/sunrise/core_ext/i18n.rb +21 -0
  240. data/lib/sunrise/core_ext/string.rb +28 -0
  241. data/lib/sunrise/core_ext.rb +3 -0
  242. data/lib/sunrise/core_plugins.rb +32 -0
  243. data/lib/sunrise/engine.rb +45 -0
  244. data/lib/sunrise/model_filter.rb +158 -0
  245. data/lib/sunrise/models/asset.rb +102 -0
  246. data/lib/sunrise/models/header.rb +34 -0
  247. data/lib/sunrise/models/page.rb +27 -0
  248. data/lib/sunrise/models/position_type.rb +15 -0
  249. data/lib/sunrise/models/role.rb +28 -0
  250. data/lib/sunrise/models/role_type.rb +15 -0
  251. data/lib/sunrise/models/structure.rb +43 -0
  252. data/lib/sunrise/models/structure_type.rb +15 -0
  253. data/lib/sunrise/models/user.rb +124 -0
  254. data/lib/sunrise/plugin.rb +46 -0
  255. data/lib/sunrise/plugins.rb +56 -0
  256. data/lib/sunrise/system_settings.rb +65 -0
  257. data/lib/sunrise/utils/accessible_attributes.rb +32 -0
  258. data/lib/sunrise/utils/header.rb +29 -0
  259. data/lib/sunrise/utils/i18n_backend.rb +87 -0
  260. data/lib/sunrise/utils/mysql.rb +105 -0
  261. data/lib/sunrise/utils/settingslogic.rb +164 -0
  262. data/lib/sunrise/utils/transliteration.rb +72 -0
  263. data/lib/sunrise/version.rb +3 -0
  264. data/lib/sunrise/views/form_builder.rb +44 -0
  265. data/lib/sunrise/views/helpers.rb +190 -0
  266. data/lib/sunrise/views/inputs/date_time_input.rb +46 -0
  267. data/lib/sunrise-core.rb +2 -0
  268. metadata +492 -0
@@ -0,0 +1,37 @@
1
+ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
2
+ <html xmlns="http://www.w3.org/1999/xhtml">
3
+ <head>
4
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
5
+ <%= tag(:meta, :content => render_keywords, :name=>"keywords") %>
6
+ <%= tag(:meta, :content => render_description, :name=>"description") %>
7
+ <%= csrf_meta_tag %>
8
+ <title><%= render_title %></title>
9
+ <%= stylesheet_link_tag "application" %>
10
+ <%= stylesheet_link_tag 'manage/panel.css', :media=> 'screen' if content_manager? %>
11
+ <!--[if lte IE 6]><link href="/stylesheets/ie.css" rel="stylesheet" type="text/css" /><![endif]-->
12
+ <!--[if lte IE 7]><link href="/stylesheets/ie7.css" rel="stylesheet" type="text/css" /><![endif]-->
13
+
14
+ <script src="https://www.google.com/jsapi?key=" type="text/javascript"></script>
15
+ <script language="Javascript" type="text/javascript">
16
+ //<![CDATA[
17
+ google.load("jquery", "1.5.1");
18
+ google.load("swfobject", "2.2");
19
+ //]]>
20
+ </script>
21
+
22
+ <%= javascript_include_tag "preloader", "rails" %>
23
+ <%= yield(:head) %>
24
+ </head>
25
+ <body>
26
+ <%= render :partial => "manage/shared/panel" if content_manager? %>
27
+ <%= render :partial => 'shared/notice' if flash %>
28
+
29
+ <div class='content'>
30
+ <%= yield %>
31
+ </div>
32
+
33
+ <%= yield(:footer) %>
34
+
35
+ <div id="preloader" style="display:none;z-index:5000;" class="load-wait"><div><strong>Загрузка</strong></div></div>
36
+ </body>
37
+ </html>
@@ -0,0 +1,2 @@
1
+ <h1><%= @structure.title %></h1>
2
+ <%=raw Nokogiri::HTML.fragment(@page.content).to_html %>
@@ -0,0 +1,17 @@
1
+ <% unless flash.keys.empty? %>
2
+ <div class="message" style="display:none;z-index:5000;">
3
+ <div class="alert-container">
4
+ <div class="alert">
5
+ <% flash.each do |key, text| %>
6
+ <%= content_tag(:div, text, :class => "flash_#{key}") %>
7
+ <% end %>
8
+ <%= link_to_function(image_tag("cross_ico.png", :title=>t('label.close')), "$(this).parents('div.message').slideUp()", :class=>"close") %>
9
+ </div>
10
+ </div>
11
+ <script type='text/javascript' charset='UTF-8'>
12
+ $(document).ready(function(){
13
+ $('div.message').slideDown('slow');
14
+ })
15
+ </script>
16
+ </div>
17
+ <% end %>
@@ -0,0 +1,40 @@
1
+ module Sunrise
2
+ module Controllers
3
+ module HeadOptions
4
+ # Inclusion hook to make #current_user and #logged_in?
5
+ # available as ActionView helper methods.
6
+ def self.included(base)
7
+ base.send :helper_method, :head_options if base.respond_to? :helper_method
8
+ end
9
+
10
+ def head_options(record, options = {})
11
+ return if record.nil?
12
+
13
+ options = { :spliter => Sunrise.title_spliter, :append_title => true }.merge(options)
14
+
15
+ header = options[:header] || (record.respond_to?(:header) ? record.header : nil)
16
+
17
+ if header && header.has_info?
18
+ @page_keywords ||= header.read(:keywords)
19
+ @page_description ||= header.read(:description)
20
+ @page_title ||= header.read(:title)
21
+ end
22
+
23
+ @page_title ||= begin
24
+ view_title = if record.respond_to?(:title)
25
+ record.title
26
+ elsif record.respond_to(:name)
27
+ record.name
28
+ end
29
+
30
+ page_title = []
31
+ page_title << options[:title] if options.key?(:title)
32
+ page_title << view_title
33
+ page_title << I18n.t("page.title") if options[:append_title]
34
+
35
+ page_title.flatten.compact.uniq.join(options[:spliter])
36
+ end
37
+ end
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,80 @@
1
+ # encoding: utf-8
2
+ require 'sunrise/core_ext'
3
+
4
+ module Sunrise
5
+ autoload :SystemSettings, 'sunrise/system_settings'
6
+ autoload :ModelFilter, 'sunrise/model_filter'
7
+ autoload :Plugins, 'sunrise/plugins'
8
+ autoload :Plugin, 'sunrise/plugin'
9
+
10
+ module Models
11
+ autoload :RoleType, 'sunrise/models/role_type'
12
+ autoload :StructureType, 'sunrise/models/structure_type'
13
+ autoload :PositionType, 'sunrise/models/position_type'
14
+ autoload :Role, 'sunrise/models/role'
15
+ autoload :Header, 'sunrise/models/header'
16
+ end
17
+
18
+ module Controllers
19
+ autoload :HeadOptions, 'sunrise/controllers/head_options'
20
+ end
21
+
22
+ module Views
23
+ autoload :Helpers, 'sunrise/views/helpers'
24
+ autoload :FormBuilder, 'sunrise/views/form_builder'
25
+ end
26
+
27
+ module Utils
28
+ autoload :Header, 'sunrise/utils/header'
29
+ autoload :Mysql, 'sunrise/utils/mysql'
30
+ autoload :Settingslogic, 'sunrise/utils/settingslogic'
31
+ autoload :Transliteration, 'sunrise/utils/transliteration'
32
+ autoload :AccessibleAttributes, 'sunrise/utils/accessible_attributes'
33
+ autoload :I18nBackend, 'sunrise/utils/i18n_backend'
34
+
35
+ IMAGE_TYPES = ['image/jpeg', 'image/png', 'image/gif', 'image/jpg', 'image/pjpeg', 'image/tiff', 'image/x-png']
36
+
37
+ def self.parameterize_filename(filename)
38
+ extension = File.extname(filename)
39
+ basename = filename.gsub(/#{extension}$/, "")
40
+
41
+ [basename.parameterize('_'), extension].join.downcase
42
+ end
43
+ end
44
+
45
+ # Custom flash_keys
46
+ mattr_accessor :flash_keys
47
+ @@flash_keys = [ :success, :failure ]
48
+
49
+ mattr_accessor :available_locales
50
+ @@available_locales = []
51
+
52
+ mattr_accessor :title_spliter
53
+ @@title_spliter = ' – '
54
+
55
+ mattr_accessor :field_error_proc
56
+ @@field_error_proc = Proc.new do |html_tag, instance|
57
+ if html_tag =~ /<(input|textarea|select)/
58
+ errors = instance.error_message.kind_of?(Array) ? instance.error_message : [instance.error_message]
59
+ errors.collect! { |error| "<li>#{error}</li>" }
60
+ message = "<ul class='error_box error_box_narrow'>#{errors.join}</ul>".html_safe
61
+ html_tag += message
62
+ end
63
+
64
+ if html_tag =~ /<label/
65
+ html_tag
66
+ else
67
+ "<div class=\"field_with_errors\">#{html_tag}</div>".html_safe
68
+ end
69
+ end
70
+
71
+ # Default way to setup Devise. Run rails generate devise_install to create
72
+ # a fresh initializer with all configuration values.
73
+ def self.setup
74
+ yield self
75
+ end
76
+ end
77
+
78
+ require 'sunrise/version'
79
+ require 'sunrise/core_plugins'
80
+ require 'sunrise/engine'
@@ -0,0 +1,22 @@
1
+ require 'enumerator'
2
+
3
+ class Array
4
+ def chunk(pieces)
5
+ q, r = length.divmod(pieces)
6
+ (0..pieces).map { |i| i * q + [r, i].min }.enum_cons(2) \
7
+ .map { |a, b| slice(a...b) }
8
+ end
9
+
10
+ def shuffle
11
+ sort_by { rand }
12
+ end
13
+
14
+ def shuffle!
15
+ self.replace shuffle
16
+ end
17
+
18
+ def random
19
+ idx = Kernel.rand(size)
20
+ at(idx)
21
+ end
22
+ end
@@ -0,0 +1,21 @@
1
+ require 'ostruct'
2
+
3
+ module I18n
4
+ def self.name_for_locale(locale)
5
+ begin
6
+ I18n.backend.translate(locale, :name, :scope => [:language])
7
+ rescue I18n::MissingTranslationData
8
+ locale.to_s
9
+ end
10
+ end
11
+
12
+ def self.all_available_locales
13
+ records = []
14
+
15
+ available_locales.each do |locale|
16
+ records << OpenStruct.new(:code => locale.to_s.downcase, :title => name_for_locale(locale))
17
+ end
18
+
19
+ records.sort_by(&:title)
20
+ end
21
+ end
@@ -0,0 +1,28 @@
1
+ class String
2
+ def is_int?
3
+ self =~ /^[-+]?[0-9]*$/
4
+ end
5
+
6
+ def no_html
7
+ str = self.dup
8
+ str.gsub!(/<\/?[^>]*>/, '')
9
+ str.strip!
10
+ str.gsub!('&nbsp;', '')
11
+ str
12
+ end
13
+
14
+ def words_count
15
+ frequencies = Hash.new(0)
16
+ downcase.scan(/(\w+([-'.]\w+)*)/) { |word, ignore| frequencies[word] += 1 }
17
+ return frequencies
18
+ end
19
+
20
+ def parameterize(sep = '-')
21
+ value = Sunrise::Utils::Transliteration.transliterate(self)
22
+ ActiveSupport::Inflector.parameterize(value, sep)
23
+ end
24
+
25
+ def self.randomize(length = 8)
26
+ Array.new(length) { (rand(122-97) + 97).chr }.join
27
+ end
28
+ end
@@ -0,0 +1,3 @@
1
+ Dir["#{File.dirname(__FILE__)}/core_ext/*.rb"].sort.each do |path|
2
+ require "sunrise/core_ext/#{File.basename(path, '.rb')}"
3
+ end
@@ -0,0 +1,32 @@
1
+ # Structure tree
2
+ Sunrise::Plugin.register :structures do |plugin|
3
+ plugin.model = 'sunrise/models/structure'
4
+ plugin.menu = 'main'
5
+ end
6
+
7
+ # Users
8
+ Sunrise::Plugin.register :users do |plugin|
9
+ plugin.model = 'sunrise/models/user'
10
+ plugin.menu = 'main'
11
+ end
12
+
13
+ # System settings
14
+ Sunrise::Plugin.register :settings do |plugin|
15
+ plugin.model = false
16
+ plugin.menu = 'main'
17
+ plugin.klass_name = 'Sunrise::SystemSettings'
18
+ end
19
+
20
+ # Static pages
21
+ Sunrise::Plugin.register :pages do |plugin|
22
+ plugin.model = 'sunrise/models/page'
23
+ plugin.menu = false
24
+ end
25
+
26
+ # Assets
27
+ Sunrise::Plugin.register :assets do |plugin|
28
+ plugin.model = 'sunrise/models/asset'
29
+ plugin.menu = false
30
+ end
31
+
32
+ [:structures, :users, :settings, :pages, :assets].each { |plugin_name| Sunrise::Plugins.activate(plugin_name) }
@@ -0,0 +1,45 @@
1
+ require 'rails'
2
+ require 'sunrise-core'
3
+
4
+ module Sunrise
5
+ class Engine < ::Rails::Engine
6
+ config.before_initialize do
7
+ ActiveSupport::XmlMini.backend = 'Nokogiri'
8
+ InheritedResources.flash_keys = Sunrise.flash_keys
9
+
10
+ config.i18n.load_path += Dir[File.join(File.dirname(__FILE__), "../../config", 'locales', '**', '*.{rb,yml}').to_s]
11
+
12
+ I18n.backend = Sunrise::Utils::I18nBackend.new
13
+
14
+ ActiveSupport.on_load :active_record do
15
+ ActiveRecord::Base.send :include, Sunrise::Utils::Mysql
16
+ ActiveRecord::Base.send :include, Sunrise::Utils::AccessibleAttributes
17
+ end
18
+
19
+ ActiveSupport.on_load :action_controller do
20
+ ActionController::Base.send :include, Sunrise::Controllers::HeadOptions
21
+ end
22
+
23
+ ActiveSupport.on_load :action_view do
24
+ ActionView::Base.send :include, Sunrise::Views::Helpers
25
+ end
26
+ end
27
+
28
+ # Wrap errors in ul->li list and skip labels.
29
+ config.to_prepare do
30
+ ActionView::Base.field_error_proc = Sunrise.field_error_proc
31
+ end
32
+
33
+ config.after_initialize do
34
+ Paperclip.interpolates('basename') do |attachment, style|
35
+ filename = attachment.original_filename.gsub(/#{File.extname(attachment.original_filename)}$/, "")
36
+ Sunrise::Utils.parameterize_filename( filename )
37
+ end
38
+ end
39
+
40
+ # For railties migrations rake
41
+ def railtie_name
42
+ 'sunrise'
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,158 @@
1
+ # encoding: utf-8
2
+ module Sunrise
3
+ class ModelFilter
4
+ attr_accessor :klass
5
+
6
+ attr_accessor :attributes, :columns
7
+
8
+ attr_accessor :order_by, :order_column, :order_type
9
+
10
+ attr_accessor :conditions
11
+
12
+ def initialize(klass, options={})
13
+ options.symbolize_keys!
14
+
15
+ @klass = klass
16
+
17
+ @columns = options[:columns]
18
+ @columns ||= klass.respond_to?(:column_names) ? @klass.column_names : []
19
+
20
+ @attributes = options[:attributes] || {}
21
+ @raw_values = {}
22
+ end
23
+
24
+ def filter(options = {})
25
+ order = options.delete(:order)
26
+ where = options.delete(:conditions)
27
+
28
+ {
29
+ :order => (self.order_by || order || "id DESC"),
30
+ :conditions => (self.conditions || where)
31
+ }.merge(options)
32
+ end
33
+
34
+ def scoped
35
+ query = @klass.scoped
36
+ query = query.order(order_by) unless order_by.blank?
37
+ query = query.where(conditions) if conditions && !conditions.empty?
38
+ query
39
+ end
40
+
41
+ def next_order_type
42
+ return if @order_type.blank?
43
+
44
+ @order_type == 'desc' ? 'asc' : 'desc'
45
+ end
46
+
47
+ def update_attributes(params = {})
48
+ return if params.nil? || params.keys.empty?
49
+
50
+ options = params.symbolize_keys
51
+
52
+ @raw_values = extract_values(options)
53
+ @conditions = extract_conditions(options)
54
+ @order_by = extract_order(options)
55
+ end
56
+
57
+ def method_missing(method, *args, &block)
58
+ match_data = method.to_s.match(/^(.+)_before_type_cast$/)
59
+ method_name = (match_data ? match_data[1] : method).to_sym
60
+
61
+ if @attributes.include?(method_name)
62
+ @raw_values[method_name]
63
+ else
64
+ super
65
+ end
66
+ end
67
+
68
+ def respond_to?(method_name)
69
+ return true if @attributes.include?(method_name.to_sym)
70
+ super
71
+ end
72
+
73
+ private
74
+
75
+ def normalize_value(attribute, value)
76
+ column = @klass.columns_hash[attribute.to_s]
77
+
78
+ case column.type
79
+ when :string then value.to_s
80
+ when :integer then value.to_s.blank? ? nil : value.to_i
81
+ when :float then value.to_s.blank? ? nil : value.to_f
82
+ else value
83
+ end
84
+ end
85
+
86
+ def extract_order(options={})
87
+ options.symbolize_keys!
88
+
89
+ ocolumn = options.delete(:order_column)
90
+ otype = options.delete(:order_type)
91
+
92
+ unless ocolumn.blank?
93
+ @order_column = ocolumn.to_s.strip.downcase.to_s
94
+ @order_column = nil unless @columns.include?(@order_column)
95
+ end
96
+
97
+ unless @order_column.blank?
98
+ @order_type = otype.to_s.strip.downcase unless otype.blank?
99
+ @order_type = nil unless ['desc', 'asc'].include?(@order_type)
100
+ @order_type ||= 'desc'
101
+
102
+ real_column = @order_column.to_s
103
+
104
+ if @klass.respond_to?(:translated_columns) && @klass.translated_columns.include?(real_column)
105
+ locale = (I18n.locale.to_s == 'uk' ? 'ua' : 'ru')
106
+ real_column = "#{@order_column}_#{locale}"
107
+ end
108
+
109
+ "#{@klass.quoted_table_name}.#{real_column} #{@order_type}"
110
+ end
111
+ end
112
+
113
+ def extract_values(options={})
114
+ values = {}
115
+
116
+ options.each do |k, v|
117
+ key = k.to_sym
118
+ values[key] = normalize_value(k, v) if @attributes.include?(key)
119
+ end
120
+
121
+ values
122
+ end
123
+
124
+ def extract_conditions(options={})
125
+ c_names = []
126
+ c_values = []
127
+
128
+ @raw_values.each do |k, v|
129
+ next if v.blank?
130
+
131
+ arr = extract_method(k, v)
132
+
133
+ c_names << arr.first
134
+ c_values << arr.last
135
+ end
136
+
137
+ [c_names.join(' AND ')] + c_values
138
+ end
139
+
140
+ def extract_method(attribute, value)
141
+ column = @klass.columns_hash[attribute.to_s]
142
+
143
+ case column.type
144
+ when :string, :text then
145
+ x = "#{@klass.quoted_table_name}.#{attribute} LIKE ?"
146
+ y = value.nil? ? nil : "#{value}%"
147
+ when :boolean then
148
+ x = "#{@klass.quoted_table_name}.#{attribute} = ?"
149
+ y = (value && value.to_i == 1) ? 1 : 0
150
+ when :integer, :float then
151
+ x = "#{@klass.quoted_table_name}.#{attribute} = ?"
152
+ y = value.nil? ? nil : value.to_i
153
+ end
154
+
155
+ [x, y]
156
+ end
157
+ end
158
+ end
@@ -0,0 +1,102 @@
1
+ # encoding: utf-8
2
+ require 'mime/types'
3
+
4
+ module Sunrise
5
+ module Models
6
+ module Asset
7
+ def self.included(base)
8
+ base.send :include, InstanceMethods
9
+ base.send :extend, ClassMethods
10
+ end
11
+
12
+ module ClassMethods
13
+ def self.extended(base)
14
+ base.class_eval do
15
+ belongs_to :user
16
+ belongs_to :assetable, :polymorphic => true
17
+
18
+ before_validation :make_content_type
19
+ before_create :read_dimensions
20
+
21
+ delegate :url, :original_filename, :content_type, :size, :path, :styles, :to => :data
22
+ alias :filename :original_filename
23
+ end
24
+ end
25
+
26
+ def move_to(index, id)
27
+ update_all(["sort_order = ?", index], ["id = ?", id.to_i])
28
+ end
29
+ end
30
+
31
+ module InstanceMethods
32
+
33
+ def thumb_url
34
+ url(:thumb)
35
+ end
36
+
37
+ def format_created_at
38
+ I18n.l(created_at, :format => "%d.%m.%Y %H:%M")
39
+ end
40
+
41
+ def to_xml(options = {}, &block)
42
+ options = {:only => [:id], :root => 'asset'}.merge(options)
43
+
44
+ options[:procs] ||= Proc.new do |options, record|
45
+ options[:builder].tag!('filename', filename)
46
+ options[:builder].tag!('path', url)
47
+ options[:builder].tag!('size', size)
48
+
49
+ unless styles.empty?
50
+ options[:builder].tag!('styles') do |xml|
51
+ styles.each do |style|
52
+ xml.tag!(style.first, url(style.first))
53
+ end
54
+ end
55
+ end
56
+ end
57
+
58
+ super
59
+ end
60
+
61
+ def as_json(options = nil)
62
+ options = {
63
+ :only => [:id, :guid, :assetable_id, :assetable_type, :user_id],
64
+ :root => 'asset',
65
+ :methods => [:filename, :url, :size, :content_type, :thumb_url]
66
+ }.merge(options || {})
67
+
68
+ super
69
+ end
70
+
71
+ def has_dimensions?
72
+ respond_to?(:width) && respond_to?(:height)
73
+ end
74
+
75
+ def image?
76
+ Sunrise::Utils::IMAGE_TYPES.include?(content_type)
77
+ end
78
+
79
+ def geometry
80
+ @geometry ||= Paperclip::Geometry.from_file(data.to_file)
81
+ @geometry
82
+ end
83
+
84
+ protected
85
+
86
+ def read_dimensions
87
+ if image? && has_dimensions?
88
+ self.width = geometry.width
89
+ self.height = geometry.height
90
+ end
91
+ end
92
+
93
+ def make_content_type
94
+ if data_content_type.blank? || data_content_type == "application/octet-stream"
95
+ content_types = MIME::Types.type_for(filename)
96
+ self.data_content_type = content_types.first.to_s unless content_types.empty?
97
+ end
98
+ end
99
+ end
100
+ end
101
+ end
102
+ end
@@ -0,0 +1,34 @@
1
+ # encoding: utf-8
2
+ module Sunrise
3
+ module Models
4
+ module Header
5
+ def self.included(base)
6
+ base.send :include, InstanceMethods
7
+ base.send :extend, ClassMethods
8
+ end
9
+
10
+ module ClassMethods
11
+ def self.extended(base)
12
+ base.class_eval do
13
+ belongs_to :headerable, :polymorphic => true
14
+ end
15
+ end
16
+ end
17
+
18
+ module InstanceMethods
19
+ def empty?
20
+ [keywords, description, title].map(&:blank?).all?
21
+ end
22
+
23
+ def has_info?
24
+ !empty?
25
+ end
26
+
27
+ def read(key)
28
+ value = read_attribute(key)
29
+ value.blank? ? nil : value
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,27 @@
1
+ # encoding: utf-8
2
+ module Sunrise
3
+ module Models
4
+ module Page
5
+ def self.included(base)
6
+ base.send :include, InstanceMethods
7
+ base.send :extend, ClassMethods
8
+ end
9
+
10
+ module ClassMethods
11
+ def self.extended(base)
12
+ base.class_eval do
13
+ belongs_to :structure
14
+ validates_presence_of :title, :content
15
+ end
16
+ end
17
+ end
18
+
19
+ module InstanceMethods
20
+ def content_without_html
21
+ return nil if self.content.blank?
22
+ self.content.no_html
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,15 @@
1
+ # encoding: utf-8
2
+ module Sunrise
3
+ module Models
4
+ class PositionType
5
+ def initialize(code)
6
+ @code = code.to_sym
7
+ end
8
+ attr_reader :code
9
+
10
+ def title
11
+ I18n.t(@code, :scope => [:manage, :structure, :position])
12
+ end
13
+ end
14
+ end
15
+ end