optimacms 0.1.51 → 0.1.52

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 (321) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/javascripts/optimacms/admin.js +4 -4
  3. data/app/assets/stylesheets/optimacms/admin.css.scss +6 -6
  4. data/app/assets/stylesheets/optimacms/admin_tpl.css.scss +15 -15
  5. data/app/assets/stylesheets/optimacms/bootstrap_and_overrides.css.scss +52 -52
  6. data/app/assets/stylesheets/optimacms/bootstrap_custom.css.scss +49 -49
  7. data/app/assets/stylesheets/optimacms/bootstrap_variables.css.scss +860 -860
  8. data/app/assets/stylesheets/optimacms/colors.css.scss +68 -68
  9. data/app/assets/stylesheets/optimacms/skins/noskin.css.scss +95 -95
  10. data/app/assets/stylesheets/optimacms/tinymce.css.scss +54 -54
  11. data/app/assets/stylesheets/optimacms/tpl.css.scss +309 -309
  12. data/app/controllers/optimacms/admin/admin_base_controller.rb +44 -44
  13. data/app/controllers/optimacms/admin/dashboard_controller.rb +6 -6
  14. data/app/controllers/optimacms/admin/layouts_controller.rb +76 -76
  15. data/app/controllers/optimacms/admin/pages_controller.rb +228 -228
  16. data/app/controllers/optimacms/admin/templates_controller.rb +314 -314
  17. data/app/controllers/optimacms/dev_controller.rb +40 -40
  18. data/app/controllers/optimacms/elfinder_controller.rb +39 -39
  19. data/app/controllers/optimacms/page_base_controller.rb +6 -6
  20. data/app/controllers/optimacms/pages_controller.rb +167 -167
  21. data/app/controllers/optimacms/tinymce_assets_controller.rb +20 -20
  22. data/app/helpers/optimacms/forms_helper.rb +75 -75
  23. data/app/inputs/textarea_tinymce_input.rb +27 -27
  24. data/app/models/concerns/optimacms/meta_content.rb +63 -63
  25. data/app/models/optimacms/language.rb +14 -14
  26. data/app/models/optimacms/layout.rb +53 -53
  27. data/app/models/optimacms/mediafile.rb +17 -17
  28. data/app/models/optimacms/page.rb +171 -171
  29. data/app/models/optimacms/page_translation.rb +10 -10
  30. data/app/models/optimacms/template.rb +390 -390
  31. data/app/models/optimacms/template_type.rb +20 -20
  32. data/app/views/optimacms/admin/common/_js_tinymce.html.haml +49 -49
  33. data/app/views/optimacms/admin/common/_modal_div.html.haml +16 -16
  34. data/app/views/optimacms/admin/dashboard/index.html.haml +18 -18
  35. data/app/views/optimacms/admin/layouts/_form.html.haml +22 -22
  36. data/app/views/optimacms/admin/layouts/edit.html.haml +5 -5
  37. data/app/views/optimacms/admin/layouts/index.html.haml +25 -25
  38. data/app/views/optimacms/admin/layouts/main.html.haml +6 -6
  39. data/app/views/optimacms/admin/layouts/new.html.haml +5 -5
  40. data/app/views/optimacms/admin/pages/_form.html.haml +78 -78
  41. data/app/views/optimacms/admin/pages/_form_folder.html.haml +14 -14
  42. data/app/views/optimacms/admin/pages/_form_old.html.haml +107 -107
  43. data/app/views/optimacms/admin/pages/_meta.html.haml +48 -48
  44. data/app/views/optimacms/admin/pages/edit.html.haml +5 -5
  45. data/app/views/optimacms/admin/pages/editfolder.html.haml +15 -15
  46. data/app/views/optimacms/admin/pages/index.html.haml +58 -58
  47. data/app/views/optimacms/admin/pages/new.html.haml +5 -5
  48. data/app/views/optimacms/admin/pages/newfolder.html.haml +15 -15
  49. data/app/views/optimacms/admin/shared/_breadcrumbs.html.haml +7 -7
  50. data/app/views/optimacms/admin/shared/_flash.html.haml +23 -23
  51. data/app/views/optimacms/admin/shared/_footer.html.haml +5 -5
  52. data/app/views/optimacms/admin/shared/_form_errors.html.haml +11 -11
  53. data/app/views/optimacms/admin/shared/_leftmenu.html.haml +49 -49
  54. data/app/views/optimacms/admin/shared/_top.html.haml +33 -33
  55. data/app/views/optimacms/admin/templates/_form.html.haml +61 -61
  56. data/app/views/optimacms/admin/templates/_js_form_modal.html.haml +43 -43
  57. data/app/views/optimacms/admin/templates/create.js.haml +3 -3
  58. data/app/views/optimacms/admin/templates/edit.html.haml +5 -5
  59. data/app/views/optimacms/admin/templates/editfolder.html.haml +31 -31
  60. data/app/views/optimacms/admin/templates/index.html.haml +48 -48
  61. data/app/views/optimacms/admin/templates/new.html.haml +37 -37
  62. data/app/views/optimacms/admin/templates/newattach.html.haml +32 -32
  63. data/app/views/optimacms/admin/templates/newfolder.html.haml +28 -28
  64. data/app/views/optimacms/elfinder/index.html.erb +54 -54
  65. data/config/initializers/assets.rb +2 -2
  66. data/config/initializers/kaminari.rb +10 -10
  67. data/config/initializers/paperclip.rb +11 -11
  68. data/config/initializers/paperclip_media_type_spoof_detector_override.rb +7 -7
  69. data/config/initializers/simple_form.rb +166 -166
  70. data/config/initializers/simple_form_bootstrap.rb +146 -146
  71. data/config/locales/simple_form.en.yml +3 -3
  72. data/config/locales/simple_form.ru.yml +3 -3
  73. data/config/tinymce.yml +6 -6
  74. data/lib/optimacms/fileutils/fileutils.rb +39 -39
  75. data/lib/optimacms/filters/form_filter.rb +226 -226
  76. data/lib/optimacms/mycontroller.rb +69 -69
  77. data/lib/optimacms/page_services/page_data.rb +97 -97
  78. data/lib/optimacms/page_services/page_process_service.rb +32 -32
  79. data/lib/optimacms/page_services/page_route_service.rb +155 -155
  80. data/lib/optimacms/simple_form_extensions/button_components.rb +33 -33
  81. data/lib/optimacms/version.rb +1 -1
  82. data/spec/dummy/app/assets/stylesheets/application.css.scss +11 -11
  83. data/spec/dummy/app/assets/stylesheets/bootstrap_and_overrides.css.scss +3 -3
  84. data/spec/dummy/app/assets/stylesheets/bootstrap_custom.css.scss +49 -49
  85. data/spec/dummy/app/assets/stylesheets/tpl.css.scss +62 -62
  86. data/spec/dummy/app/controllers/home_controller.rb +6 -6
  87. data/spec/dummy/app/controllers/my_controller.rb +6 -6
  88. data/spec/dummy/app/controllers/news_controller.rb +46 -46
  89. data/spec/dummy/app/models/news.rb +7 -7
  90. data/spec/dummy/app/views/home/index.html.haml +18 -18
  91. data/spec/dummy/app/views/my/hello.html.haml +4 -4
  92. data/spec/dummy/app/views/news/index.html.haml +13 -13
  93. data/spec/dummy/app/views/news/show.html.haml +6 -6
  94. data/spec/dummy/app/views/pages/1.html.erb +16 -16
  95. data/spec/dummy/app/views/pages/about.html.erb +12 -12
  96. data/spec/dummy/app/views/pages/text1.html +1 -1
  97. data/spec/dummy/app/views/services/index.html.haml +9 -9
  98. data/spec/dummy/app/views/services/service.html.haml +2 -2
  99. data/spec/dummy/app/views/temp/html1.html +1 -1
  100. data/spec/dummy/app/views/temp/p1.html.haml +6 -6
  101. data/spec/dummy/app/views/temp/t1.html.haml +13 -13
  102. data/spec/dummy/app/views/temp9/t2.html +8 -8
  103. data/spec/dummy/app/views/workers/_breadcrumb_worker.html.haml +11 -11
  104. data/spec/dummy/app/views/workers/_breadcrumb_workers.html.haml +9 -9
  105. data/spec/dummy/app/views/workers/_contacts_our.html.haml +3 -3
  106. data/spec/dummy/app/views/workers/_list_worker.html.haml +46 -46
  107. data/spec/dummy/app/views/workers/_list_workers.html.haml +6 -6
  108. data/spec/dummy/app/views/workers/_share_js.html.haml +22 -22
  109. data/spec/dummy/app/views/workers/_share_worker.html.haml +11 -11
  110. data/spec/dummy/app/views/workers/_show_info.html.haml +53 -53
  111. data/spec/dummy/app/views/workers/_tabs.html.haml +11 -11
  112. data/spec/dummy/app/views/workers/contacts.html.haml +19 -19
  113. data/spec/dummy/app/views/workers/index.html.haml +49 -49
  114. data/spec/dummy/app/views/workers/portfolio.html.haml +20 -20
  115. data/spec/dummy/app/views/workers/services.html.haml +11 -11
  116. data/spec/dummy/app/views/workers/show.html.haml +53 -53
  117. data/spec/dummy/app/views/workers/show_notfound.html.haml +8 -8
  118. data/spec/dummy/app/views/workers/t2.html.haml +1 -1
  119. data/spec/dummy/app/views/workers/work.html.haml +43 -43
  120. data/spec/dummy/config/tinymce.yml +5 -5
  121. data/spec/dummy/db/schema.rb +164 -164
  122. data/spec/dummy/log/development.log +57 -20394
  123. data/spec/dummy/tmp/pids/server.pid +1 -1
  124. data/spec/factories/page.rb +25 -25
  125. data/spec/models/page_spec.rb +92 -92
  126. data/spec/spec_helper.rb +89 -89
  127. data/spec/support/factory_girl.rb +15 -15
  128. metadata +1435 -1821
  129. data/spec/dummy/app/views/temp/_part2.html.haml +0 -1
  130. data/spec/dummy/log/test.log +0 -203
  131. data/spec/dummy/tmp/cache/assets/development/sass/0abc660c880b2e10d695d713e519e6a4257cd348/application.css.scssc +0 -0
  132. data/spec/dummy/tmp/cache/assets/development/sass/0abc660c880b2e10d695d713e519e6a4257cd348/bootstrap_and_overrides.css.scssc +0 -0
  133. data/spec/dummy/tmp/cache/assets/development/sass/0abc660c880b2e10d695d713e519e6a4257cd348/bootstrap_custom.css.scssc +0 -0
  134. data/spec/dummy/tmp/cache/assets/development/sass/0abc660c880b2e10d695d713e519e6a4257cd348/bootstrap_variables.css.scssc +0 -0
  135. data/spec/dummy/tmp/cache/assets/development/sass/0abc660c880b2e10d695d713e519e6a4257cd348/tpl.css.scssc +0 -0
  136. data/spec/dummy/tmp/cache/assets/development/sass/18577b7353d72dbc7e81d46af07240af8557f987/_hacks.scssc +0 -0
  137. data/spec/dummy/tmp/cache/assets/development/sass/255a203cf5ecbb5470dfd267d6d4b923c8f1e5f0/_css3.scssc +0 -0
  138. data/spec/dummy/tmp/cache/assets/development/sass/255a203cf5ecbb5470dfd267d6d4b923c8f1e5f0/_support.scssc +0 -0
  139. data/spec/dummy/tmp/cache/assets/development/sass/4b8b59c3cee3225b46cdcaa54f7d0474421be9c6/_bootstrap-sprockets.scssc +0 -0
  140. data/spec/dummy/tmp/cache/assets/development/sass/7f871ea7e3a8127767d5a5868622ef2909611f26/noskin.css.scssc +0 -0
  141. data/spec/dummy/tmp/cache/assets/development/sass/a1b4b92b7663fe8c3e3678ca845c8a0566c3ca13/admin.css.scssc +0 -0
  142. data/spec/dummy/tmp/cache/assets/development/sass/a1b4b92b7663fe8c3e3678ca845c8a0566c3ca13/admin_tpl.css.scssc +0 -0
  143. data/spec/dummy/tmp/cache/assets/development/sass/a1b4b92b7663fe8c3e3678ca845c8a0566c3ca13/bootstrap_and_overrides.css.scssc +0 -0
  144. data/spec/dummy/tmp/cache/assets/development/sass/a1b4b92b7663fe8c3e3678ca845c8a0566c3ca13/bootstrap_custom.css.scssc +0 -0
  145. data/spec/dummy/tmp/cache/assets/development/sass/a1b4b92b7663fe8c3e3678ca845c8a0566c3ca13/bootstrap_variables.css.scssc +0 -0
  146. data/spec/dummy/tmp/cache/assets/development/sass/a1b4b92b7663fe8c3e3678ca845c8a0566c3ca13/colors.css.scssc +0 -0
  147. data/spec/dummy/tmp/cache/assets/development/sass/a1b4b92b7663fe8c3e3678ca845c8a0566c3ca13/tinymce.css.scssc +0 -0
  148. data/spec/dummy/tmp/cache/assets/development/sass/a1b4b92b7663fe8c3e3678ca845c8a0566c3ca13/tpl.css.scssc +0 -0
  149. data/spec/dummy/tmp/cache/assets/development/sass/bfa17faa2a4aa370d46a5900b72c48f05b4837d1/_alerts.scssc +0 -0
  150. data/spec/dummy/tmp/cache/assets/development/sass/bfa17faa2a4aa370d46a5900b72c48f05b4837d1/_background-variant.scssc +0 -0
  151. data/spec/dummy/tmp/cache/assets/development/sass/bfa17faa2a4aa370d46a5900b72c48f05b4837d1/_border-radius.scssc +0 -0
  152. data/spec/dummy/tmp/cache/assets/development/sass/bfa17faa2a4aa370d46a5900b72c48f05b4837d1/_buttons.scssc +0 -0
  153. data/spec/dummy/tmp/cache/assets/development/sass/bfa17faa2a4aa370d46a5900b72c48f05b4837d1/_center-block.scssc +0 -0
  154. data/spec/dummy/tmp/cache/assets/development/sass/bfa17faa2a4aa370d46a5900b72c48f05b4837d1/_clearfix.scssc +0 -0
  155. data/spec/dummy/tmp/cache/assets/development/sass/bfa17faa2a4aa370d46a5900b72c48f05b4837d1/_forms.scssc +0 -0
  156. data/spec/dummy/tmp/cache/assets/development/sass/bfa17faa2a4aa370d46a5900b72c48f05b4837d1/_gradients.scssc +0 -0
  157. data/spec/dummy/tmp/cache/assets/development/sass/bfa17faa2a4aa370d46a5900b72c48f05b4837d1/_grid-framework.scssc +0 -0
  158. data/spec/dummy/tmp/cache/assets/development/sass/bfa17faa2a4aa370d46a5900b72c48f05b4837d1/_grid.scssc +0 -0
  159. data/spec/dummy/tmp/cache/assets/development/sass/bfa17faa2a4aa370d46a5900b72c48f05b4837d1/_hide-text.scssc +0 -0
  160. data/spec/dummy/tmp/cache/assets/development/sass/bfa17faa2a4aa370d46a5900b72c48f05b4837d1/_image.scssc +0 -0
  161. data/spec/dummy/tmp/cache/assets/development/sass/bfa17faa2a4aa370d46a5900b72c48f05b4837d1/_labels.scssc +0 -0
  162. data/spec/dummy/tmp/cache/assets/development/sass/bfa17faa2a4aa370d46a5900b72c48f05b4837d1/_list-group.scssc +0 -0
  163. data/spec/dummy/tmp/cache/assets/development/sass/bfa17faa2a4aa370d46a5900b72c48f05b4837d1/_nav-divider.scssc +0 -0
  164. data/spec/dummy/tmp/cache/assets/development/sass/bfa17faa2a4aa370d46a5900b72c48f05b4837d1/_nav-vertical-align.scssc +0 -0
  165. data/spec/dummy/tmp/cache/assets/development/sass/bfa17faa2a4aa370d46a5900b72c48f05b4837d1/_opacity.scssc +0 -0
  166. data/spec/dummy/tmp/cache/assets/development/sass/bfa17faa2a4aa370d46a5900b72c48f05b4837d1/_pagination.scssc +0 -0
  167. data/spec/dummy/tmp/cache/assets/development/sass/bfa17faa2a4aa370d46a5900b72c48f05b4837d1/_panels.scssc +0 -0
  168. data/spec/dummy/tmp/cache/assets/development/sass/bfa17faa2a4aa370d46a5900b72c48f05b4837d1/_progress-bar.scssc +0 -0
  169. data/spec/dummy/tmp/cache/assets/development/sass/bfa17faa2a4aa370d46a5900b72c48f05b4837d1/_reset-filter.scssc +0 -0
  170. data/spec/dummy/tmp/cache/assets/development/sass/bfa17faa2a4aa370d46a5900b72c48f05b4837d1/_resize.scssc +0 -0
  171. data/spec/dummy/tmp/cache/assets/development/sass/bfa17faa2a4aa370d46a5900b72c48f05b4837d1/_responsive-visibility.scssc +0 -0
  172. data/spec/dummy/tmp/cache/assets/development/sass/bfa17faa2a4aa370d46a5900b72c48f05b4837d1/_size.scssc +0 -0
  173. data/spec/dummy/tmp/cache/assets/development/sass/bfa17faa2a4aa370d46a5900b72c48f05b4837d1/_tab-focus.scssc +0 -0
  174. data/spec/dummy/tmp/cache/assets/development/sass/bfa17faa2a4aa370d46a5900b72c48f05b4837d1/_table-row.scssc +0 -0
  175. data/spec/dummy/tmp/cache/assets/development/sass/bfa17faa2a4aa370d46a5900b72c48f05b4837d1/_text-emphasis.scssc +0 -0
  176. data/spec/dummy/tmp/cache/assets/development/sass/bfa17faa2a4aa370d46a5900b72c48f05b4837d1/_text-overflow.scssc +0 -0
  177. data/spec/dummy/tmp/cache/assets/development/sass/bfa17faa2a4aa370d46a5900b72c48f05b4837d1/_vendor-prefixes.scssc +0 -0
  178. data/spec/dummy/tmp/cache/assets/development/sass/e04ca948242d213270bfe676c8b96e7b33226468/_appearance.scssc +0 -0
  179. data/spec/dummy/tmp/cache/assets/development/sass/e04ca948242d213270bfe676c8b96e7b33226468/_background-clip.scssc +0 -0
  180. data/spec/dummy/tmp/cache/assets/development/sass/e04ca948242d213270bfe676c8b96e7b33226468/_background-origin.scssc +0 -0
  181. data/spec/dummy/tmp/cache/assets/development/sass/e04ca948242d213270bfe676c8b96e7b33226468/_background-size.scssc +0 -0
  182. data/spec/dummy/tmp/cache/assets/development/sass/e04ca948242d213270bfe676c8b96e7b33226468/_border-radius.scssc +0 -0
  183. data/spec/dummy/tmp/cache/assets/development/sass/e04ca948242d213270bfe676c8b96e7b33226468/_box-shadow.scssc +0 -0
  184. data/spec/dummy/tmp/cache/assets/development/sass/e04ca948242d213270bfe676c8b96e7b33226468/_box-sizing.scssc +0 -0
  185. data/spec/dummy/tmp/cache/assets/development/sass/e04ca948242d213270bfe676c8b96e7b33226468/_box.scssc +0 -0
  186. data/spec/dummy/tmp/cache/assets/development/sass/e04ca948242d213270bfe676c8b96e7b33226468/_columns.scssc +0 -0
  187. data/spec/dummy/tmp/cache/assets/development/sass/e04ca948242d213270bfe676c8b96e7b33226468/_filter.scssc +0 -0
  188. data/spec/dummy/tmp/cache/assets/development/sass/e04ca948242d213270bfe676c8b96e7b33226468/_font-face.scssc +0 -0
  189. data/spec/dummy/tmp/cache/assets/development/sass/e04ca948242d213270bfe676c8b96e7b33226468/_hyphenation.scssc +0 -0
  190. data/spec/dummy/tmp/cache/assets/development/sass/e04ca948242d213270bfe676c8b96e7b33226468/_images.scssc +0 -0
  191. data/spec/dummy/tmp/cache/assets/development/sass/e04ca948242d213270bfe676c8b96e7b33226468/_inline-block.scssc +0 -0
  192. data/spec/dummy/tmp/cache/assets/development/sass/e04ca948242d213270bfe676c8b96e7b33226468/_opacity.scssc +0 -0
  193. data/spec/dummy/tmp/cache/assets/development/sass/e04ca948242d213270bfe676c8b96e7b33226468/_regions.scssc +0 -0
  194. data/spec/dummy/tmp/cache/assets/development/sass/e04ca948242d213270bfe676c8b96e7b33226468/_shared.scssc +0 -0
  195. data/spec/dummy/tmp/cache/assets/development/sass/e04ca948242d213270bfe676c8b96e7b33226468/_text-shadow.scssc +0 -0
  196. data/spec/dummy/tmp/cache/assets/development/sass/e04ca948242d213270bfe676c8b96e7b33226468/_transform.scssc +0 -0
  197. data/spec/dummy/tmp/cache/assets/development/sass/e04ca948242d213270bfe676c8b96e7b33226468/_transition.scssc +0 -0
  198. data/spec/dummy/tmp/cache/assets/development/sass/e04ca948242d213270bfe676c8b96e7b33226468/_user-interface.scssc +0 -0
  199. data/spec/dummy/tmp/cache/assets/development/sass/e541a95436c6e387d69ff457c2fe7f7bd11c2069/_alerts.scssc +0 -0
  200. data/spec/dummy/tmp/cache/assets/development/sass/e541a95436c6e387d69ff457c2fe7f7bd11c2069/_badges.scssc +0 -0
  201. data/spec/dummy/tmp/cache/assets/development/sass/e541a95436c6e387d69ff457c2fe7f7bd11c2069/_breadcrumbs.scssc +0 -0
  202. data/spec/dummy/tmp/cache/assets/development/sass/e541a95436c6e387d69ff457c2fe7f7bd11c2069/_button-groups.scssc +0 -0
  203. data/spec/dummy/tmp/cache/assets/development/sass/e541a95436c6e387d69ff457c2fe7f7bd11c2069/_buttons.scssc +0 -0
  204. data/spec/dummy/tmp/cache/assets/development/sass/e541a95436c6e387d69ff457c2fe7f7bd11c2069/_carousel.scssc +0 -0
  205. data/spec/dummy/tmp/cache/assets/development/sass/e541a95436c6e387d69ff457c2fe7f7bd11c2069/_close.scssc +0 -0
  206. data/spec/dummy/tmp/cache/assets/development/sass/e541a95436c6e387d69ff457c2fe7f7bd11c2069/_code.scssc +0 -0
  207. data/spec/dummy/tmp/cache/assets/development/sass/e541a95436c6e387d69ff457c2fe7f7bd11c2069/_component-animations.scssc +0 -0
  208. data/spec/dummy/tmp/cache/assets/development/sass/e541a95436c6e387d69ff457c2fe7f7bd11c2069/_dropdowns.scssc +0 -0
  209. data/spec/dummy/tmp/cache/assets/development/sass/e541a95436c6e387d69ff457c2fe7f7bd11c2069/_forms.scssc +0 -0
  210. data/spec/dummy/tmp/cache/assets/development/sass/e541a95436c6e387d69ff457c2fe7f7bd11c2069/_glyphicons.scssc +0 -0
  211. data/spec/dummy/tmp/cache/assets/development/sass/e541a95436c6e387d69ff457c2fe7f7bd11c2069/_grid.scssc +0 -0
  212. data/spec/dummy/tmp/cache/assets/development/sass/e541a95436c6e387d69ff457c2fe7f7bd11c2069/_input-groups.scssc +0 -0
  213. data/spec/dummy/tmp/cache/assets/development/sass/e541a95436c6e387d69ff457c2fe7f7bd11c2069/_jumbotron.scssc +0 -0
  214. data/spec/dummy/tmp/cache/assets/development/sass/e541a95436c6e387d69ff457c2fe7f7bd11c2069/_labels.scssc +0 -0
  215. data/spec/dummy/tmp/cache/assets/development/sass/e541a95436c6e387d69ff457c2fe7f7bd11c2069/_list-group.scssc +0 -0
  216. data/spec/dummy/tmp/cache/assets/development/sass/e541a95436c6e387d69ff457c2fe7f7bd11c2069/_media.scssc +0 -0
  217. data/spec/dummy/tmp/cache/assets/development/sass/e541a95436c6e387d69ff457c2fe7f7bd11c2069/_mixins.scssc +0 -0
  218. data/spec/dummy/tmp/cache/assets/development/sass/e541a95436c6e387d69ff457c2fe7f7bd11c2069/_modals.scssc +0 -0
  219. data/spec/dummy/tmp/cache/assets/development/sass/e541a95436c6e387d69ff457c2fe7f7bd11c2069/_navbar.scssc +0 -0
  220. data/spec/dummy/tmp/cache/assets/development/sass/e541a95436c6e387d69ff457c2fe7f7bd11c2069/_navs.scssc +0 -0
  221. data/spec/dummy/tmp/cache/assets/development/sass/e541a95436c6e387d69ff457c2fe7f7bd11c2069/_normalize.scssc +0 -0
  222. data/spec/dummy/tmp/cache/assets/development/sass/e541a95436c6e387d69ff457c2fe7f7bd11c2069/_pager.scssc +0 -0
  223. data/spec/dummy/tmp/cache/assets/development/sass/e541a95436c6e387d69ff457c2fe7f7bd11c2069/_pagination.scssc +0 -0
  224. data/spec/dummy/tmp/cache/assets/development/sass/e541a95436c6e387d69ff457c2fe7f7bd11c2069/_panels.scssc +0 -0
  225. data/spec/dummy/tmp/cache/assets/development/sass/e541a95436c6e387d69ff457c2fe7f7bd11c2069/_popovers.scssc +0 -0
  226. data/spec/dummy/tmp/cache/assets/development/sass/e541a95436c6e387d69ff457c2fe7f7bd11c2069/_print.scssc +0 -0
  227. data/spec/dummy/tmp/cache/assets/development/sass/e541a95436c6e387d69ff457c2fe7f7bd11c2069/_progress-bars.scssc +0 -0
  228. data/spec/dummy/tmp/cache/assets/development/sass/e541a95436c6e387d69ff457c2fe7f7bd11c2069/_responsive-embed.scssc +0 -0
  229. data/spec/dummy/tmp/cache/assets/development/sass/e541a95436c6e387d69ff457c2fe7f7bd11c2069/_responsive-utilities.scssc +0 -0
  230. data/spec/dummy/tmp/cache/assets/development/sass/e541a95436c6e387d69ff457c2fe7f7bd11c2069/_scaffolding.scssc +0 -0
  231. data/spec/dummy/tmp/cache/assets/development/sass/e541a95436c6e387d69ff457c2fe7f7bd11c2069/_tables.scssc +0 -0
  232. data/spec/dummy/tmp/cache/assets/development/sass/e541a95436c6e387d69ff457c2fe7f7bd11c2069/_thumbnails.scssc +0 -0
  233. data/spec/dummy/tmp/cache/assets/development/sass/e541a95436c6e387d69ff457c2fe7f7bd11c2069/_tooltip.scssc +0 -0
  234. data/spec/dummy/tmp/cache/assets/development/sass/e541a95436c6e387d69ff457c2fe7f7bd11c2069/_type.scssc +0 -0
  235. data/spec/dummy/tmp/cache/assets/development/sass/e541a95436c6e387d69ff457c2fe7f7bd11c2069/_utilities.scssc +0 -0
  236. data/spec/dummy/tmp/cache/assets/development/sass/e541a95436c6e387d69ff457c2fe7f7bd11c2069/_variables.scssc +0 -0
  237. data/spec/dummy/tmp/cache/assets/development/sass/e541a95436c6e387d69ff457c2fe7f7bd11c2069/_wells.scssc +0 -0
  238. data/spec/dummy/tmp/cache/assets/development/sass/fc41a79de5ec40d34c8a83221f3f3da2c64f4153/font-awesome.css.erbc +0 -0
  239. data/spec/dummy/tmp/cache/assets/development/sprockets/002bd8f28c62a795a10ce5716ceffc21 +0 -0
  240. data/spec/dummy/tmp/cache/assets/development/sprockets/053f826d1ea01a2fac355de0755e5c40 +0 -0
  241. data/spec/dummy/tmp/cache/assets/development/sprockets/05e27d4921b00a0fdddb47a737a64494 +0 -0
  242. data/spec/dummy/tmp/cache/assets/development/sprockets/0a470277dd21c166b9dfb68b03d34d5c +0 -0
  243. data/spec/dummy/tmp/cache/assets/development/sprockets/0b1671e1bffda60e6a95f72b9176d628 +0 -0
  244. data/spec/dummy/tmp/cache/assets/development/sprockets/0c01383de62960e3667c7bf3788ecdb6 +0 -0
  245. data/spec/dummy/tmp/cache/assets/development/sprockets/0d2f255829ff9f72d98dead4f35ddf02 +0 -0
  246. data/spec/dummy/tmp/cache/assets/development/sprockets/11f54468370774efca0fe1afb2ebf1d9 +0 -0
  247. data/spec/dummy/tmp/cache/assets/development/sprockets/1c0ef71c34dc1d573e1b4b527116e3cc +0 -0
  248. data/spec/dummy/tmp/cache/assets/development/sprockets/2168c08c151d642aa46ea4bc6283929c +0 -0
  249. data/spec/dummy/tmp/cache/assets/development/sprockets/2a9369c8d28de014045a120b692e8139 +0 -0
  250. data/spec/dummy/tmp/cache/assets/development/sprockets/2f5173deea6c795b8fdde723bb4b63af +0 -0
  251. data/spec/dummy/tmp/cache/assets/development/sprockets/2f7d38a264678a2db4a0d569a3313cb1 +0 -0
  252. data/spec/dummy/tmp/cache/assets/development/sprockets/3240ef40c1dc9d13156bbd790ec2651a +0 -0
  253. data/spec/dummy/tmp/cache/assets/development/sprockets/332dfe4887cbad3adbd20e6609fa4960 +0 -0
  254. data/spec/dummy/tmp/cache/assets/development/sprockets/3347cc312918facec5bbac684ea65715 +0 -0
  255. data/spec/dummy/tmp/cache/assets/development/sprockets/3cd4037d8c32ad8fcdd5e3bbb8dfc35a +0 -0
  256. data/spec/dummy/tmp/cache/assets/development/sprockets/4016d2fd0b776ceb82fcbfbc5d2e26b1 +0 -0
  257. data/spec/dummy/tmp/cache/assets/development/sprockets/43dc3e92cd09deb0fc54dd97b46935e9 +0 -0
  258. data/spec/dummy/tmp/cache/assets/development/sprockets/452d7e35d5a012ae12fa7346fcf2239b +0 -0
  259. data/spec/dummy/tmp/cache/assets/development/sprockets/49c7cb5dd916ffc9e87ce3b989c92062 +0 -0
  260. data/spec/dummy/tmp/cache/assets/development/sprockets/529a74a4530de52f6c3ebbf107ffe9f2 +0 -0
  261. data/spec/dummy/tmp/cache/assets/development/sprockets/55a2847335c39261e1efe764deb18592 +0 -0
  262. data/spec/dummy/tmp/cache/assets/development/sprockets/56c7eb172a7423728c45d0a751d198e3 +0 -0
  263. data/spec/dummy/tmp/cache/assets/development/sprockets/6789fe765d536063c998330523bb12b9 +0 -0
  264. data/spec/dummy/tmp/cache/assets/development/sprockets/678a2e392e656b8132f0420e4ec28ed6 +0 -0
  265. data/spec/dummy/tmp/cache/assets/development/sprockets/6843f0414f73089579ae0f9fddf7b38f +0 -0
  266. data/spec/dummy/tmp/cache/assets/development/sprockets/6c7c58744c14732af9bf574870fdf07e +0 -0
  267. data/spec/dummy/tmp/cache/assets/development/sprockets/6cdbd6f171a27a578bcb07dd5bfa83a2 +0 -0
  268. data/spec/dummy/tmp/cache/assets/development/sprockets/6e431ed1dfb5bbcbd33a5f9e069dd3ab +0 -0
  269. data/spec/dummy/tmp/cache/assets/development/sprockets/6f943f22c610e6417422e4a13e0bcc0d +0 -0
  270. data/spec/dummy/tmp/cache/assets/development/sprockets/73fbaa501dc0b072cf2c27fa7dfe0d91 +0 -0
  271. data/spec/dummy/tmp/cache/assets/development/sprockets/7c886717bced4d59ab89e012b52f40de +0 -0
  272. data/spec/dummy/tmp/cache/assets/development/sprockets/821470da3272c8b99070972d4f4f58ca +0 -0
  273. data/spec/dummy/tmp/cache/assets/development/sprockets/88d843fcb07453d1057fac1e254fde0d +0 -0
  274. data/spec/dummy/tmp/cache/assets/development/sprockets/8956737a82f17db48d50e13f133aeefc +0 -0
  275. data/spec/dummy/tmp/cache/assets/development/sprockets/8ab512c9b33ac90e699b73469d71f061 +0 -0
  276. data/spec/dummy/tmp/cache/assets/development/sprockets/8b5a7992567ebbeb9a882d074778f8c8 +0 -0
  277. data/spec/dummy/tmp/cache/assets/development/sprockets/8d71fe4f0e2910900097bdc07bf2d6af +0 -0
  278. data/spec/dummy/tmp/cache/assets/development/sprockets/8e1785ddbfab42cd2df0416eb3932253 +0 -0
  279. data/spec/dummy/tmp/cache/assets/development/sprockets/9024d024c62c2668836b1e1b7b3b78cc +0 -0
  280. data/spec/dummy/tmp/cache/assets/development/sprockets/928ed298f875a25727ca516f5c03f344 +0 -0
  281. data/spec/dummy/tmp/cache/assets/development/sprockets/97c1e12a09973e0fb97f23a1dc496443 +0 -0
  282. data/spec/dummy/tmp/cache/assets/development/sprockets/991576185140a77411185839fd0533f1 +0 -0
  283. data/spec/dummy/tmp/cache/assets/development/sprockets/99e8d6370ba85ec4a61d953f5ed261af +0 -0
  284. data/spec/dummy/tmp/cache/assets/development/sprockets/9ee80730ab26986d507820ac7a288d5c +0 -0
  285. data/spec/dummy/tmp/cache/assets/development/sprockets/a3faca31eb11ba1a981535f9c8408282 +0 -0
  286. data/spec/dummy/tmp/cache/assets/development/sprockets/a5c68a2aec806face32c749f380f1e14 +0 -0
  287. data/spec/dummy/tmp/cache/assets/development/sprockets/a64dbcf0e4afe0985b1abd3e209d17cd +0 -0
  288. data/spec/dummy/tmp/cache/assets/development/sprockets/a6d357fbe03dae6f590180f6c5e0e148 +0 -0
  289. data/spec/dummy/tmp/cache/assets/development/sprockets/aa58fb159780a7200a1bc4c6844cc5c4 +0 -0
  290. data/spec/dummy/tmp/cache/assets/development/sprockets/aaba73a43e02d8c6550bae851f17e7a0 +0 -0
  291. data/spec/dummy/tmp/cache/assets/development/sprockets/af26c017afcf68f1edd44a4c9bb942e4 +0 -0
  292. data/spec/dummy/tmp/cache/assets/development/sprockets/b3defd466aec80b128284b8d85324630 +0 -0
  293. data/spec/dummy/tmp/cache/assets/development/sprockets/b48ed8a3de3ca66055ee4fd18b16421f +0 -0
  294. data/spec/dummy/tmp/cache/assets/development/sprockets/ba9859d0d2b7d4d7d5b03ff3a71ed478 +0 -0
  295. data/spec/dummy/tmp/cache/assets/development/sprockets/bcca522c6302f184f12fe0e8a7d7e71a +0 -0
  296. data/spec/dummy/tmp/cache/assets/development/sprockets/be8a0cd6c3605b9d7c22642609316a9f +0 -0
  297. data/spec/dummy/tmp/cache/assets/development/sprockets/c11c6d97cfc7ef7945fa87f14b44445c +0 -0
  298. data/spec/dummy/tmp/cache/assets/development/sprockets/c13fc73ceafa45876a901b3e775b83ae +0 -0
  299. data/spec/dummy/tmp/cache/assets/development/sprockets/c5f3450b5366b6fbdc4172ce089fba48 +0 -0
  300. data/spec/dummy/tmp/cache/assets/development/sprockets/c982bb1e71844744a60dc9b4afcb2f49 +0 -0
  301. data/spec/dummy/tmp/cache/assets/development/sprockets/cf24c3f1bb8adb1f168758f2bd9775c9 +0 -0
  302. data/spec/dummy/tmp/cache/assets/development/sprockets/cffd775d018f68ce5dba1ee0d951a994 +0 -0
  303. data/spec/dummy/tmp/cache/assets/development/sprockets/d3e5a199890ba7c706fc62c2b891714d +0 -0
  304. data/spec/dummy/tmp/cache/assets/development/sprockets/d584baf83d8a779d945f9668f902fa7c +0 -0
  305. data/spec/dummy/tmp/cache/assets/development/sprockets/d71b820ce5f8b310e466f517bd3a8e4b +0 -0
  306. data/spec/dummy/tmp/cache/assets/development/sprockets/d8dab59d17daf5a5081153e2ad7d09b4 +0 -0
  307. data/spec/dummy/tmp/cache/assets/development/sprockets/dd4a8658311b7a2cd8effa6479827559 +0 -0
  308. data/spec/dummy/tmp/cache/assets/development/sprockets/e11970a225a09526aac3f76d7ee91822 +0 -0
  309. data/spec/dummy/tmp/cache/assets/development/sprockets/e3dd086dd858b5bff9cfd60a031c2091 +0 -0
  310. data/spec/dummy/tmp/cache/assets/development/sprockets/e43bcf201d76cdf6e1fe345195c1cd9e +0 -0
  311. data/spec/dummy/tmp/cache/assets/development/sprockets/e945ca604ee0240455a5652953b3e495 +0 -0
  312. data/spec/dummy/tmp/cache/assets/development/sprockets/ec33505f0e2ed4dd12951ecceffa3695 +0 -0
  313. data/spec/dummy/tmp/cache/assets/development/sprockets/ee287313e28f341f83628dec0a353fa6 +0 -0
  314. data/spec/dummy/tmp/cache/assets/development/sprockets/ee9a23832dc2a49ee6ec6d3f1d6a0e1f +0 -0
  315. data/spec/dummy/tmp/cache/assets/development/sprockets/ef2d6862f5fd690c5387cafd88944a9f +0 -0
  316. data/spec/dummy/tmp/cache/assets/development/sprockets/ef8c3824b85ed745cad651aadda4f2b8 +0 -0
  317. data/spec/dummy/tmp/cache/assets/development/sprockets/f557612d05bb9fea499dce8352b3f0ca +0 -0
  318. data/spec/dummy/tmp/cache/assets/development/sprockets/f7cbd26ba1d28d48de824f0e94586655 +0 -0
  319. data/spec/dummy/tmp/cache/assets/development/sprockets/f7f3056583a2454471a4a5f7200dcefa +0 -0
  320. data/spec/dummy/tmp/cache/assets/development/sprockets/f9c51fa87975943d31bc1bfd7cb684c6 +0 -0
  321. data/spec/dummy/tmp/cache/assets/development/sprockets/ff9ed89418a3f78032b8f8184dd98e80 +0 -0
@@ -1,97 +1,97 @@
1
- module Optimacms
2
- module PageServices
3
- # data used for processing page
4
- class PageData
5
- attr_accessor :page # page object
6
- #, :params
7
- attr_accessor :url, :url_vars
8
- attr_accessor :lang
9
- attr_accessor :controller, :action
10
- attr_accessor :layout
11
- attr_accessor :template
12
-
13
- #
14
- attr_reader :compiled_view_path
15
-
16
- include PageProcessService
17
-
18
- def controller_class
19
- Object.const_get controller.to_s.camelize+'Controller'
20
- end
21
-
22
- def url_vars
23
- @url_vars || {}
24
- end
25
-
26
- def lang
27
- # TODO: calc lang
28
-
29
- # from url
30
- lang_url = url_vars.fetch(:lang, '')
31
-
32
- return lang_url unless lang_url.blank?
33
-
34
-
35
- I18n.locale
36
- end
37
-
38
- def layout
39
- page.layout
40
- end
41
-
42
- def template
43
- page.template
44
- end
45
-
46
- def meta
47
- page_lang = page.is_translated ? lang : ''
48
- row = page.translations.where(:lang=>page_lang).first
49
-
50
- return nil if row.nil?
51
-
52
- {:title=>row.meta_title, :keywords=>row.meta_keywords, :description=>row.meta_description}
53
- end
54
-
55
- def view_content
56
- return '' if template.basepath.nil?
57
-
58
- f = template.fullpath
59
- return '' if !File.exists? f
60
- File.read(f)
61
- end
62
-
63
- def view_filename
64
- #Rails.root.to_s + '/app/views/'+view_path
65
- page.template.fullpath
66
- end
67
-
68
- def compiled_view_filename
69
- dir_cache+'/'+@compiled_view_basename
70
- end
71
-
72
-
73
- def compiled_view_path
74
- dirname_views+'/'+@compiled_view_basename
75
- end
76
-
77
- def dirname_views
78
- 'optimacms/cache'
79
- end
80
-
81
- def dir_cache
82
- # TODO: get from settings
83
- Rails.root.to_s+'/app/views/'+dirname_views
84
- end
85
-
86
-
87
- def generate_content
88
- @compiled_view_basename = generate_view_name
89
- Optimacms::Fileutils::Fileutils::create_dir_if_not_exists compiled_view_filename
90
-
91
- text = compile_content view_content
92
- save_text_to_compiled_view text
93
- end
94
-
95
- end
96
- end
97
- end
1
+ module Optimacms
2
+ module PageServices
3
+ # data used for processing page
4
+ class PageData
5
+ attr_accessor :page # page object
6
+ #, :params
7
+ attr_accessor :url, :url_vars
8
+ attr_accessor :lang
9
+ attr_accessor :controller, :action
10
+ attr_accessor :layout
11
+ attr_accessor :template
12
+
13
+ #
14
+ attr_reader :compiled_view_path
15
+
16
+ include PageProcessService
17
+
18
+ def controller_class
19
+ Object.const_get controller.to_s.camelize+'Controller'
20
+ end
21
+
22
+ def url_vars
23
+ @url_vars || {}
24
+ end
25
+
26
+ def lang
27
+ # TODO: calc lang
28
+
29
+ # from url
30
+ lang_url = url_vars.fetch(:lang, '')
31
+
32
+ return lang_url unless lang_url.blank?
33
+
34
+
35
+ I18n.locale
36
+ end
37
+
38
+ def layout
39
+ page.layout
40
+ end
41
+
42
+ def template
43
+ page.template
44
+ end
45
+
46
+ def meta
47
+ page_lang = page.is_translated ? lang : ''
48
+ row = page.translations.where(:lang=>page_lang).first
49
+
50
+ return nil if row.nil?
51
+
52
+ {:title=>row.meta_title, :keywords=>row.meta_keywords, :description=>row.meta_description}
53
+ end
54
+
55
+ def view_content
56
+ return '' if template.basepath.nil?
57
+
58
+ f = template.fullpath
59
+ return '' if !File.exists? f
60
+ File.read(f)
61
+ end
62
+
63
+ def view_filename
64
+ #Rails.root.to_s + '/app/views/'+view_path
65
+ page.template.fullpath
66
+ end
67
+
68
+ def compiled_view_filename
69
+ dir_cache+'/'+@compiled_view_basename
70
+ end
71
+
72
+
73
+ def compiled_view_path
74
+ dirname_views+'/'+@compiled_view_basename
75
+ end
76
+
77
+ def dirname_views
78
+ 'optimacms/cache'
79
+ end
80
+
81
+ def dir_cache
82
+ # TODO: get from settings
83
+ Rails.root.to_s+'/app/views/'+dirname_views
84
+ end
85
+
86
+
87
+ def generate_content
88
+ @compiled_view_basename = generate_view_name
89
+ Optimacms::Fileutils::Fileutils::create_dir_if_not_exists compiled_view_filename
90
+
91
+ text = compile_content view_content
92
+ save_text_to_compiled_view text
93
+ end
94
+
95
+ end
96
+ end
97
+ end
@@ -1,32 +1,32 @@
1
- module Optimacms
2
- module PageServices
3
- module PageProcessService
4
-
5
- def compile_content(page_content)
6
- #res.gsub! /\{\{content\}\}/, page_content
7
- res = page_content
8
-
9
- res
10
- end
11
-
12
- def generate_view_name
13
- uid =SecureRandom.uuid.to_s
14
- id = uid.gsub /[^a-z\d]+/,''
15
- f_path = id+'.html.erb'
16
- #Digest::SHA1.hexdigest(Time.now.to_s)
17
- #filename = dir_cache+'/'+f_path
18
- f_path
19
- #'pages/2.html.erb'
20
- end
21
-
22
- def save_text_to_compiled_view(text)
23
- filename = compiled_view_filename
24
- File.open(filename, "w+") do |f|
25
- f.write(text)
26
- end
27
- end
28
-
29
- end
30
- end
31
- end
32
-
1
+ module Optimacms
2
+ module PageServices
3
+ module PageProcessService
4
+
5
+ def compile_content(page_content)
6
+ #res.gsub! /\{\{content\}\}/, page_content
7
+ res = page_content
8
+
9
+ res
10
+ end
11
+
12
+ def generate_view_name
13
+ uid =SecureRandom.uuid.to_s
14
+ id = uid.gsub /[^a-z\d]+/,''
15
+ f_path = id+'.html.erb'
16
+ #Digest::SHA1.hexdigest(Time.now.to_s)
17
+ #filename = dir_cache+'/'+f_path
18
+ f_path
19
+ #'pages/2.html.erb'
20
+ end
21
+
22
+ def save_text_to_compiled_view(text)
23
+ filename = compiled_view_filename
24
+ File.open(filename, "w+") do |f|
25
+ f.write(text)
26
+ end
27
+ end
28
+
29
+ end
30
+ end
31
+ end
32
+
@@ -1,156 +1,156 @@
1
- module Optimacms
2
- module PageServices
3
- class PageRouteService
4
-
5
- def self.find_page_by_url(url, lang='')
6
- where_base = 'is_folder = 0 AND enabled = 1 AND '
7
- order = 'url_parts_count DESC, url_vars_count ASC'
8
-
9
- if url.blank?
10
- where = where_base + 'url = \'\''
11
- else
12
- #where = where_base + '\'' + url + '\' REGEXP parsed_url'
13
- where = where_base + '\'' + url + '\''+ " REGEXP parsed_url"
14
- end
15
-
16
- # result
17
- pagedata = PageData.new
18
- pagedata.url = url
19
-
20
- # try 1
21
- rows = Page.where(where).order(order).all
22
- pagedata.page = rows[0] if rows.count>0
23
-
24
- # try 2
25
- if pagedata.page.nil? && url.blank?
26
- where = where_base + "url = '#{lang}'"
27
- rows = Page.where(where).order(order).all
28
-
29
- pagedata.page = rows[0] if row.count>0
30
- end
31
-
32
- return pagedata if pagedata.page.nil?
33
-
34
-
35
- # params from url
36
- pagedata.url_vars = get_url_vars(pagedata.url, pagedata.page)
37
-
38
- # controller
39
- if pagedata.page.controller_action.present?
40
- pagedata.controller, pagedata.action = parse_controller_action(pagedata.page.controller_action)
41
- end
42
-
43
-
44
- pagedata
45
- end
46
-
47
- def self.parse_controller_action(s)
48
- m = s.match /^(\w+)#(\w+)$/
49
- if m
50
- [m[1], m[2]]
51
- else
52
- return nil
53
- end
54
- end
55
-
56
-
57
- REGEX_VARIABLE = '[a-z\d\_]+'
58
-
59
- def self.parse_url(url)
60
- if url.blank?
61
- return '^$'
62
- end
63
-
64
- url_parts = url.split '/'
65
- a = []
66
- url_parts.each do |part|
67
- # check for brackets inside brackets
68
- return nil if part =~ /\{[^{}]*[{}][^{}]*\}/
69
-
70
- # check if any single brackets or symbol $ without brackets or bracket without $
71
- return nil if part =~ /(\{[^}]*$|^[^{]*\}|[^{]\$|\{[^\$])/
72
-
73
- p = part
74
-
75
- # variables
76
- #p.gsub! /\{\$[^}]+\}/, '([^/]+)'
77
- p.gsub! /(\:#{REGEX_VARIABLE})([-\.]|$)/, '([^/]+)\2'
78
-
79
-
80
- # escape system symbols
81
- # replace '.'
82
- p.sub! '.', '[.]'
83
-
84
-
85
- a << p
86
- end
87
-
88
- return '^'+url_parts.join('\/')+'$'
89
- end
90
-
91
- def self.count_url_parts(url)
92
- url_parts = url.split '/'
93
- n = url_parts.count
94
-
95
- # if nothing after the last /
96
- n-=1 if url_parts.last == ''
97
-
98
- n
99
- end
100
-
101
- def self.count_url_vars(url)
102
- #m = url.scan /\{\$[^}]+\}/
103
- m = url.scan /\:#{REGEX_VARIABLE}/
104
- m.count
105
- end
106
-
107
- def self.get_url_vars(url, page_row)
108
- return {} if page_row.nil?
109
- return {} if url.blank?
110
-
111
- parsed_url = page_row.parsed_url.sub '/', '\/'
112
-
113
- #if (preg_match('/' . $parsed_url . '/', $url, $values_matches)) {
114
- m_params_in_url = url.scan /#{parsed_url}/
115
-
116
- return nil if m_params_in_url.empty?
117
-
118
- values_matches = m_params_in_url[0]
119
-
120
- # search for variables in URL
121
- #keys_matches = page_row.url.scan /\{\$([^}\/]+)\}/
122
- keys_matches = page_row.url.scan /\:(#{REGEX_VARIABLE})/
123
- if !keys_matches.empty?
124
- keys_matches = keys_matches.map{|r| r[0]}
125
- if keys_matches.count == values_matches.count
126
- res = {}
127
- values_matches.each_with_index do |val, key|
128
- res[keys_matches[key].to_sym] = val
129
- end
130
- #url_vars = array_combine($keys_matches, $values_matches);
131
- return res
132
- else
133
- #user_error('Keys and values has different number of elements');
134
- return {}
135
- end
136
-
137
- elsif m_params_in_url.count == 0
138
- # no variables found, and parsed_url has no variables => return empty []
139
- return {}
140
- else
141
- # smth wrong
142
- return {}
143
- end
144
-
145
- end
146
-
147
- def self.make_url(u, p={})
148
- res = u.gsub(/\:#{REGEX_VARIABLE}/) do
149
- |name| (p[name[1..-1].to_sym] || '')
150
- end
151
- res
152
- end
153
- end
154
-
155
- end
1
+ module Optimacms
2
+ module PageServices
3
+ class PageRouteService
4
+
5
+ def self.find_page_by_url(url, lang='')
6
+ where_base = 'is_folder = 0 AND enabled = 1 AND '
7
+ order = 'url_parts_count DESC, url_vars_count ASC'
8
+
9
+ if url.blank?
10
+ where = where_base + 'url = \'\''
11
+ else
12
+ #where = where_base + '\'' + url + '\' REGEXP parsed_url'
13
+ where = where_base + '\'' + url + '\''+ " REGEXP parsed_url"
14
+ end
15
+
16
+ # result
17
+ pagedata = PageData.new
18
+ pagedata.url = url
19
+
20
+ # try 1
21
+ rows = Page.where(where).order(order).all
22
+ pagedata.page = rows[0] if rows.count>0
23
+
24
+ # try 2
25
+ if pagedata.page.nil? && url.blank?
26
+ where = where_base + "url = '#{lang}'"
27
+ rows = Page.where(where).order(order).all
28
+
29
+ pagedata.page = rows[0] if row.count>0
30
+ end
31
+
32
+ return pagedata if pagedata.page.nil?
33
+
34
+
35
+ # params from url
36
+ pagedata.url_vars = get_url_vars(pagedata.url, pagedata.page)
37
+
38
+ # controller
39
+ if pagedata.page.controller_action.present?
40
+ pagedata.controller, pagedata.action = parse_controller_action(pagedata.page.controller_action)
41
+ end
42
+
43
+
44
+ pagedata
45
+ end
46
+
47
+ def self.parse_controller_action(s)
48
+ m = s.match /^(\w+)#(\w+)$/
49
+ if m
50
+ [m[1], m[2]]
51
+ else
52
+ return nil
53
+ end
54
+ end
55
+
56
+
57
+ REGEX_VARIABLE = '[a-z\d\_]+'
58
+
59
+ def self.parse_url(url)
60
+ if url.blank?
61
+ return '^$'
62
+ end
63
+
64
+ url_parts = url.split '/'
65
+ a = []
66
+ url_parts.each do |part|
67
+ # check for brackets inside brackets
68
+ return nil if part =~ /\{[^{}]*[{}][^{}]*\}/
69
+
70
+ # check if any single brackets or symbol $ without brackets or bracket without $
71
+ return nil if part =~ /(\{[^}]*$|^[^{]*\}|[^{]\$|\{[^\$])/
72
+
73
+ p = part
74
+
75
+ # variables
76
+ #p.gsub! /\{\$[^}]+\}/, '([^/]+)'
77
+ p.gsub! /(\:#{REGEX_VARIABLE})([-\.]|$)/, '([^/]+)\2'
78
+
79
+
80
+ # escape system symbols
81
+ # replace '.'
82
+ p.sub! '.', '[.]'
83
+
84
+
85
+ a << p
86
+ end
87
+
88
+ return '^'+url_parts.join('\/')+'$'
89
+ end
90
+
91
+ def self.count_url_parts(url)
92
+ url_parts = url.split '/'
93
+ n = url_parts.count
94
+
95
+ # if nothing after the last /
96
+ n-=1 if url_parts.last == ''
97
+
98
+ n
99
+ end
100
+
101
+ def self.count_url_vars(url)
102
+ #m = url.scan /\{\$[^}]+\}/
103
+ m = url.scan /\:#{REGEX_VARIABLE}/
104
+ m.count
105
+ end
106
+
107
+ def self.get_url_vars(url, page_row)
108
+ return {} if page_row.nil?
109
+ return {} if url.blank?
110
+
111
+ parsed_url = page_row.parsed_url.sub '/', '\/'
112
+
113
+ #if (preg_match('/' . $parsed_url . '/', $url, $values_matches)) {
114
+ m_params_in_url = url.scan /#{parsed_url}/
115
+
116
+ return nil if m_params_in_url.empty?
117
+
118
+ values_matches = m_params_in_url[0]
119
+
120
+ # search for variables in URL
121
+ #keys_matches = page_row.url.scan /\{\$([^}\/]+)\}/
122
+ keys_matches = page_row.url.scan /\:(#{REGEX_VARIABLE})/
123
+ if !keys_matches.empty?
124
+ keys_matches = keys_matches.map{|r| r[0]}
125
+ if keys_matches.count == values_matches.count
126
+ res = {}
127
+ values_matches.each_with_index do |val, key|
128
+ res[keys_matches[key].to_sym] = val
129
+ end
130
+ #url_vars = array_combine($keys_matches, $values_matches);
131
+ return res
132
+ else
133
+ #user_error('Keys and values has different number of elements');
134
+ return {}
135
+ end
136
+
137
+ elsif m_params_in_url.count == 0
138
+ # no variables found, and parsed_url has no variables => return empty []
139
+ return {}
140
+ else
141
+ # smth wrong
142
+ return {}
143
+ end
144
+
145
+ end
146
+
147
+ def self.make_url(u, p={})
148
+ res = u.gsub(/\:#{REGEX_VARIABLE}/) do
149
+ |name| (p[name[1..-1].to_sym] || '')
150
+ end
151
+ res
152
+ end
153
+ end
154
+
155
+ end
156
156
  end
@@ -1,33 +1,33 @@
1
- module Optimacms
2
- module SimpleFormExtensions
3
- module ButtonComponents
4
- def submit_cancel(*args, &block)
5
- template.content_tag :div, :class => "form-group" do
6
- template.content_tag :div, :class => "col-sm-offset-1 col-sm-6" do
7
- options = args.extract_options!
8
-
9
- # class
10
- options[:class] = [options[:class], 'btn', 'btn-primary', 'btn-lg'].compact
11
-
12
- #
13
- args << options
14
-
15
-
16
- # with cancel link
17
- if cancel = options.delete(:cancel)
18
- submit(*args, &block) + '&nbsp;&nbsp;'.html_safe + template.link_to(I18n.t('simple_form.buttons.cancel'), cancel)
19
- else
20
- submit(*args, &block)
21
- end
22
-
23
- end
24
- end
25
- end
26
-
27
- end
28
-
29
- SimpleForm::FormBuilder.send :include, ButtonComponents
30
- end
31
- end
32
-
33
-
1
+ module Optimacms
2
+ module SimpleFormExtensions
3
+ module ButtonComponents
4
+ def submit_cancel(*args, &block)
5
+ template.content_tag :div, :class => "form-group" do
6
+ template.content_tag :div, :class => "col-sm-offset-1 col-sm-6" do
7
+ options = args.extract_options!
8
+
9
+ # class
10
+ options[:class] = [options[:class], 'btn', 'btn-primary', 'btn-lg'].compact
11
+
12
+ #
13
+ args << options
14
+
15
+
16
+ # with cancel link
17
+ if cancel = options.delete(:cancel)
18
+ submit(*args, &block) + '&nbsp;&nbsp;'.html_safe + template.link_to(I18n.t('simple_form.buttons.cancel'), cancel)
19
+ else
20
+ submit(*args, &block)
21
+ end
22
+
23
+ end
24
+ end
25
+ end
26
+
27
+ end
28
+
29
+ SimpleForm::FormBuilder.send :include, ButtonComponents
30
+ end
31
+ end
32
+
33
+
@@ -1,3 +1,3 @@
1
1
  module Optimacms
2
- VERSION = "0.1.51"
2
+ VERSION = "0.1.52"
3
3
  end
@@ -1,11 +1,11 @@
1
- @import "compass/css3";
2
-
3
- @import "font-awesome";
4
-
5
- @import "bootstrap_variables";
6
- @import "bootstrap-sprockets";
7
- @import "bootstrap_custom";
8
- @import "bootstrap_and_overrides";
9
-
10
-
11
-
1
+ @import "compass/css3";
2
+
3
+ @import "font-awesome";
4
+
5
+ @import "bootstrap_variables";
6
+ @import "bootstrap-sprockets";
7
+ @import "bootstrap_custom";
8
+ @import "bootstrap_and_overrides";
9
+
10
+
11
+
@@ -1,3 +1,3 @@
1
- body { padding-top: 0px; }
2
-
3
-
1
+ body { padding-top: 0px; }
2
+
3
+