optimacms 0.1.55 → 0.1.56
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.
- checksums.yaml +4 -4
- data/app/assets/javascripts/optimacms/admin.js +4 -4
- data/app/assets/stylesheets/optimacms/admin.css.scss +6 -6
- data/app/assets/stylesheets/optimacms/admin_tpl.css.scss +15 -15
- data/app/assets/stylesheets/optimacms/bootstrap_and_overrides.css.scss +52 -52
- data/app/assets/stylesheets/optimacms/bootstrap_custom.css.scss +49 -49
- data/app/assets/stylesheets/optimacms/bootstrap_variables.css.scss +860 -860
- data/app/assets/stylesheets/optimacms/colors.css.scss +68 -68
- data/app/assets/stylesheets/optimacms/skins/noskin.css.scss +95 -95
- data/app/assets/stylesheets/optimacms/tinymce.css.scss +54 -54
- data/app/assets/stylesheets/optimacms/tpl.css.scss +309 -309
- data/app/controllers/optimacms/admin/admin_base_controller.rb +44 -44
- data/app/controllers/optimacms/admin/dashboard_controller.rb +6 -6
- data/app/controllers/optimacms/admin/layouts_controller.rb +76 -76
- data/app/controllers/optimacms/admin/pages_controller.rb +229 -229
- data/app/controllers/optimacms/admin/templates_controller.rb +315 -315
- data/app/controllers/optimacms/dev_controller.rb +40 -40
- data/app/controllers/optimacms/elfinder_controller.rb +39 -39
- data/app/controllers/optimacms/page_base_controller.rb +6 -6
- data/app/controllers/optimacms/pages_controller.rb +170 -170
- data/app/controllers/optimacms/tinymce_assets_controller.rb +20 -20
- data/app/helpers/optimacms/application_helper.rb +111 -106
- data/app/helpers/optimacms/forms_helper.rb +75 -75
- data/app/inputs/textarea_tinymce_input.rb +27 -27
- data/app/models/concerns/optimacms/meta_content.rb +63 -63
- data/app/models/optimacms/language.rb +14 -14
- data/app/models/optimacms/layout.rb +53 -53
- data/app/models/optimacms/mediafile.rb +17 -17
- data/app/models/optimacms/page.rb +171 -171
- data/app/models/optimacms/page_translation.rb +10 -10
- data/app/models/optimacms/template.rb +390 -390
- data/app/models/optimacms/template_type.rb +20 -20
- data/app/views/optimacms/admin/common/_js_tinymce.html.haml +49 -49
- data/app/views/optimacms/admin/common/_modal_div.html.haml +16 -16
- data/app/views/optimacms/admin/dashboard/index.html.haml +18 -18
- data/app/views/optimacms/admin/layouts/_form.html.haml +22 -22
- data/app/views/optimacms/admin/layouts/edit.html.haml +5 -5
- data/app/views/optimacms/admin/layouts/index.html.haml +25 -25
- data/app/views/optimacms/admin/layouts/main.html.haml +6 -6
- data/app/views/optimacms/admin/layouts/new.html.haml +5 -5
- data/app/views/optimacms/admin/pages/_form.html.haml +78 -78
- data/app/views/optimacms/admin/pages/_form_folder.html.haml +14 -14
- data/app/views/optimacms/admin/pages/_form_old.html.haml +107 -107
- data/app/views/optimacms/admin/pages/_meta.html.haml +48 -48
- data/app/views/optimacms/admin/pages/edit.html.haml +5 -5
- data/app/views/optimacms/admin/pages/editfolder.html.haml +15 -15
- data/app/views/optimacms/admin/pages/index.html.haml +58 -58
- data/app/views/optimacms/admin/pages/new.html.haml +5 -5
- data/app/views/optimacms/admin/pages/newfolder.html.haml +15 -15
- data/app/views/optimacms/admin/shared/_breadcrumbs.html.haml +7 -7
- data/app/views/optimacms/admin/shared/_flash.html.haml +23 -23
- data/app/views/optimacms/admin/shared/_footer.html.haml +5 -5
- data/app/views/optimacms/admin/shared/_form_errors.html.haml +11 -11
- data/app/views/optimacms/admin/shared/_leftmenu.html.haml +49 -49
- data/app/views/optimacms/admin/shared/_top.html.haml +33 -33
- data/app/views/optimacms/admin/templates/_form.html.haml +61 -61
- data/app/views/optimacms/admin/templates/_js_form_modal.html.haml +43 -43
- data/app/views/optimacms/admin/templates/create.js.haml +3 -3
- data/app/views/optimacms/admin/templates/edit.html.haml +5 -5
- data/app/views/optimacms/admin/templates/editfolder.html.haml +31 -31
- data/app/views/optimacms/admin/templates/index.html.haml +48 -48
- data/app/views/optimacms/admin/templates/new.html.haml +37 -37
- data/app/views/optimacms/admin/templates/newattach.html.haml +32 -32
- data/app/views/optimacms/admin/templates/newfolder.html.haml +28 -28
- data/app/views/optimacms/elfinder/index.html.erb +54 -54
- data/config/initializers/assets.rb +2 -2
- data/config/initializers/kaminari.rb +10 -10
- data/config/initializers/paperclip.rb +11 -11
- data/config/initializers/paperclip_media_type_spoof_detector_override.rb +7 -7
- data/config/initializers/simple_form.rb +166 -166
- data/config/initializers/simple_form_bootstrap.rb +146 -146
- data/config/locales/simple_form.en.yml +3 -3
- data/config/locales/simple_form.ru.yml +3 -3
- data/config/tinymce.yml +6 -6
- data/lib/optimacms/fileutils/fileutils.rb +39 -39
- data/lib/optimacms/filters/form_filter.rb +226 -226
- data/lib/optimacms/mycontroller.rb +84 -82
- data/lib/optimacms/page_services/page_data.rb +97 -97
- data/lib/optimacms/page_services/page_process_service.rb +32 -32
- data/lib/optimacms/page_services/page_route_service.rb +175 -156
- data/lib/optimacms/simple_form_extensions/button_components.rb +33 -33
- data/lib/optimacms/version.rb +3 -3
- data/spec/dummy/app/assets/stylesheets/application.css.scss +11 -11
- data/spec/dummy/app/assets/stylesheets/bootstrap_and_overrides.css.scss +3 -3
- data/spec/dummy/app/assets/stylesheets/bootstrap_custom.css.scss +49 -49
- data/spec/dummy/app/assets/stylesheets/tpl.css.scss +62 -62
- data/spec/dummy/app/controllers/home_controller.rb +6 -6
- data/spec/dummy/app/controllers/my_controller.rb +6 -6
- data/spec/dummy/app/controllers/news_controller.rb +46 -46
- data/spec/dummy/app/models/news.rb +7 -7
- data/spec/dummy/app/views/home/index.html.haml +18 -18
- data/spec/dummy/app/views/my/hello.html.haml +4 -4
- data/spec/dummy/app/views/news/index.html.haml +13 -13
- data/spec/dummy/app/views/news/show.html.haml +6 -6
- data/spec/dummy/app/views/pages/1.html.erb +16 -16
- data/spec/dummy/app/views/pages/about.html.erb +12 -12
- data/spec/dummy/app/views/pages/text1.html +1 -1
- data/spec/dummy/app/views/services/index.html.haml +9 -9
- data/spec/dummy/app/views/services/service.html.haml +2 -2
- data/spec/dummy/app/views/temp/_part2.html.haml +1 -0
- data/spec/dummy/app/views/temp/html1.html +1 -1
- data/spec/dummy/app/views/temp/p1.html.haml +6 -6
- data/spec/dummy/app/views/temp/t1.html.haml +13 -13
- data/spec/dummy/app/views/temp9/t2.html +8 -8
- data/spec/dummy/app/views/workers/_breadcrumb_worker.html.haml +11 -11
- data/spec/dummy/app/views/workers/_breadcrumb_workers.html.haml +9 -9
- data/spec/dummy/app/views/workers/_contacts_our.html.haml +3 -3
- data/spec/dummy/app/views/workers/_list_worker.html.haml +46 -46
- data/spec/dummy/app/views/workers/_list_workers.html.haml +6 -6
- data/spec/dummy/app/views/workers/_share_js.html.haml +22 -22
- data/spec/dummy/app/views/workers/_share_worker.html.haml +11 -11
- data/spec/dummy/app/views/workers/_show_info.html.haml +53 -53
- data/spec/dummy/app/views/workers/_tabs.html.haml +11 -11
- data/spec/dummy/app/views/workers/contacts.html.haml +19 -19
- data/spec/dummy/app/views/workers/index.html.haml +49 -49
- data/spec/dummy/app/views/workers/portfolio.html.haml +20 -20
- data/spec/dummy/app/views/workers/services.html.haml +11 -11
- data/spec/dummy/app/views/workers/show.html.haml +53 -53
- data/spec/dummy/app/views/workers/show_notfound.html.haml +8 -8
- data/spec/dummy/app/views/workers/t2.html.haml +1 -1
- data/spec/dummy/app/views/workers/work.html.haml +43 -43
- data/spec/dummy/config/tinymce.yml +5 -5
- data/spec/dummy/db/schema.rb +164 -164
- data/spec/dummy/log/development.log +20396 -0
- data/spec/dummy/log/test.log +203 -0
- data/spec/dummy/tmp/cache/assets/development/sass/0abc660c880b2e10d695d713e519e6a4257cd348/application.css.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/0abc660c880b2e10d695d713e519e6a4257cd348/bootstrap_and_overrides.css.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/0abc660c880b2e10d695d713e519e6a4257cd348/bootstrap_custom.css.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/0abc660c880b2e10d695d713e519e6a4257cd348/bootstrap_variables.css.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/0abc660c880b2e10d695d713e519e6a4257cd348/tpl.css.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/18577b7353d72dbc7e81d46af07240af8557f987/_hacks.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/255a203cf5ecbb5470dfd267d6d4b923c8f1e5f0/_css3.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/255a203cf5ecbb5470dfd267d6d4b923c8f1e5f0/_support.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/4b8b59c3cee3225b46cdcaa54f7d0474421be9c6/_bootstrap-sprockets.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/7f871ea7e3a8127767d5a5868622ef2909611f26/noskin.css.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/a1b4b92b7663fe8c3e3678ca845c8a0566c3ca13/admin.css.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/a1b4b92b7663fe8c3e3678ca845c8a0566c3ca13/admin_tpl.css.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/a1b4b92b7663fe8c3e3678ca845c8a0566c3ca13/bootstrap_and_overrides.css.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/a1b4b92b7663fe8c3e3678ca845c8a0566c3ca13/bootstrap_custom.css.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/a1b4b92b7663fe8c3e3678ca845c8a0566c3ca13/bootstrap_variables.css.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/a1b4b92b7663fe8c3e3678ca845c8a0566c3ca13/colors.css.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/a1b4b92b7663fe8c3e3678ca845c8a0566c3ca13/tinymce.css.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/a1b4b92b7663fe8c3e3678ca845c8a0566c3ca13/tpl.css.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/bfa17faa2a4aa370d46a5900b72c48f05b4837d1/_alerts.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/bfa17faa2a4aa370d46a5900b72c48f05b4837d1/_background-variant.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/bfa17faa2a4aa370d46a5900b72c48f05b4837d1/_border-radius.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/bfa17faa2a4aa370d46a5900b72c48f05b4837d1/_buttons.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/bfa17faa2a4aa370d46a5900b72c48f05b4837d1/_center-block.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/bfa17faa2a4aa370d46a5900b72c48f05b4837d1/_clearfix.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/bfa17faa2a4aa370d46a5900b72c48f05b4837d1/_forms.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/bfa17faa2a4aa370d46a5900b72c48f05b4837d1/_gradients.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/bfa17faa2a4aa370d46a5900b72c48f05b4837d1/_grid-framework.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/bfa17faa2a4aa370d46a5900b72c48f05b4837d1/_grid.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/bfa17faa2a4aa370d46a5900b72c48f05b4837d1/_hide-text.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/bfa17faa2a4aa370d46a5900b72c48f05b4837d1/_image.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/bfa17faa2a4aa370d46a5900b72c48f05b4837d1/_labels.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/bfa17faa2a4aa370d46a5900b72c48f05b4837d1/_list-group.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/bfa17faa2a4aa370d46a5900b72c48f05b4837d1/_nav-divider.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/bfa17faa2a4aa370d46a5900b72c48f05b4837d1/_nav-vertical-align.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/bfa17faa2a4aa370d46a5900b72c48f05b4837d1/_opacity.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/bfa17faa2a4aa370d46a5900b72c48f05b4837d1/_pagination.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/bfa17faa2a4aa370d46a5900b72c48f05b4837d1/_panels.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/bfa17faa2a4aa370d46a5900b72c48f05b4837d1/_progress-bar.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/bfa17faa2a4aa370d46a5900b72c48f05b4837d1/_reset-filter.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/bfa17faa2a4aa370d46a5900b72c48f05b4837d1/_resize.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/bfa17faa2a4aa370d46a5900b72c48f05b4837d1/_responsive-visibility.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/bfa17faa2a4aa370d46a5900b72c48f05b4837d1/_size.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/bfa17faa2a4aa370d46a5900b72c48f05b4837d1/_tab-focus.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/bfa17faa2a4aa370d46a5900b72c48f05b4837d1/_table-row.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/bfa17faa2a4aa370d46a5900b72c48f05b4837d1/_text-emphasis.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/bfa17faa2a4aa370d46a5900b72c48f05b4837d1/_text-overflow.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/bfa17faa2a4aa370d46a5900b72c48f05b4837d1/_vendor-prefixes.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/e04ca948242d213270bfe676c8b96e7b33226468/_appearance.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/e04ca948242d213270bfe676c8b96e7b33226468/_background-clip.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/e04ca948242d213270bfe676c8b96e7b33226468/_background-origin.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/e04ca948242d213270bfe676c8b96e7b33226468/_background-size.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/e04ca948242d213270bfe676c8b96e7b33226468/_border-radius.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/e04ca948242d213270bfe676c8b96e7b33226468/_box-shadow.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/e04ca948242d213270bfe676c8b96e7b33226468/_box-sizing.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/e04ca948242d213270bfe676c8b96e7b33226468/_box.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/e04ca948242d213270bfe676c8b96e7b33226468/_columns.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/e04ca948242d213270bfe676c8b96e7b33226468/_filter.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/e04ca948242d213270bfe676c8b96e7b33226468/_font-face.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/e04ca948242d213270bfe676c8b96e7b33226468/_hyphenation.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/e04ca948242d213270bfe676c8b96e7b33226468/_images.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/e04ca948242d213270bfe676c8b96e7b33226468/_inline-block.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/e04ca948242d213270bfe676c8b96e7b33226468/_opacity.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/e04ca948242d213270bfe676c8b96e7b33226468/_regions.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/e04ca948242d213270bfe676c8b96e7b33226468/_shared.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/e04ca948242d213270bfe676c8b96e7b33226468/_text-shadow.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/e04ca948242d213270bfe676c8b96e7b33226468/_transform.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/e04ca948242d213270bfe676c8b96e7b33226468/_transition.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/e04ca948242d213270bfe676c8b96e7b33226468/_user-interface.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/e541a95436c6e387d69ff457c2fe7f7bd11c2069/_alerts.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/e541a95436c6e387d69ff457c2fe7f7bd11c2069/_badges.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/e541a95436c6e387d69ff457c2fe7f7bd11c2069/_breadcrumbs.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/e541a95436c6e387d69ff457c2fe7f7bd11c2069/_button-groups.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/e541a95436c6e387d69ff457c2fe7f7bd11c2069/_buttons.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/e541a95436c6e387d69ff457c2fe7f7bd11c2069/_carousel.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/e541a95436c6e387d69ff457c2fe7f7bd11c2069/_close.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/e541a95436c6e387d69ff457c2fe7f7bd11c2069/_code.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/e541a95436c6e387d69ff457c2fe7f7bd11c2069/_component-animations.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/e541a95436c6e387d69ff457c2fe7f7bd11c2069/_dropdowns.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/e541a95436c6e387d69ff457c2fe7f7bd11c2069/_forms.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/e541a95436c6e387d69ff457c2fe7f7bd11c2069/_glyphicons.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/e541a95436c6e387d69ff457c2fe7f7bd11c2069/_grid.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/e541a95436c6e387d69ff457c2fe7f7bd11c2069/_input-groups.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/e541a95436c6e387d69ff457c2fe7f7bd11c2069/_jumbotron.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/e541a95436c6e387d69ff457c2fe7f7bd11c2069/_labels.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/e541a95436c6e387d69ff457c2fe7f7bd11c2069/_list-group.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/e541a95436c6e387d69ff457c2fe7f7bd11c2069/_media.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/e541a95436c6e387d69ff457c2fe7f7bd11c2069/_mixins.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/e541a95436c6e387d69ff457c2fe7f7bd11c2069/_modals.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/e541a95436c6e387d69ff457c2fe7f7bd11c2069/_navbar.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/e541a95436c6e387d69ff457c2fe7f7bd11c2069/_navs.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/e541a95436c6e387d69ff457c2fe7f7bd11c2069/_normalize.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/e541a95436c6e387d69ff457c2fe7f7bd11c2069/_pager.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/e541a95436c6e387d69ff457c2fe7f7bd11c2069/_pagination.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/e541a95436c6e387d69ff457c2fe7f7bd11c2069/_panels.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/e541a95436c6e387d69ff457c2fe7f7bd11c2069/_popovers.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/e541a95436c6e387d69ff457c2fe7f7bd11c2069/_print.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/e541a95436c6e387d69ff457c2fe7f7bd11c2069/_progress-bars.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/e541a95436c6e387d69ff457c2fe7f7bd11c2069/_responsive-embed.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/e541a95436c6e387d69ff457c2fe7f7bd11c2069/_responsive-utilities.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/e541a95436c6e387d69ff457c2fe7f7bd11c2069/_scaffolding.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/e541a95436c6e387d69ff457c2fe7f7bd11c2069/_tables.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/e541a95436c6e387d69ff457c2fe7f7bd11c2069/_thumbnails.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/e541a95436c6e387d69ff457c2fe7f7bd11c2069/_tooltip.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/e541a95436c6e387d69ff457c2fe7f7bd11c2069/_type.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/e541a95436c6e387d69ff457c2fe7f7bd11c2069/_utilities.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/e541a95436c6e387d69ff457c2fe7f7bd11c2069/_variables.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/e541a95436c6e387d69ff457c2fe7f7bd11c2069/_wells.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sass/fc41a79de5ec40d34c8a83221f3f3da2c64f4153/font-awesome.css.erbc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/002bd8f28c62a795a10ce5716ceffc21 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/053f826d1ea01a2fac355de0755e5c40 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/05e27d4921b00a0fdddb47a737a64494 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/0a470277dd21c166b9dfb68b03d34d5c +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/0b1671e1bffda60e6a95f72b9176d628 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/0c01383de62960e3667c7bf3788ecdb6 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/0d2f255829ff9f72d98dead4f35ddf02 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/11f54468370774efca0fe1afb2ebf1d9 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/1c0ef71c34dc1d573e1b4b527116e3cc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/2168c08c151d642aa46ea4bc6283929c +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/2a9369c8d28de014045a120b692e8139 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/2f5173deea6c795b8fdde723bb4b63af +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/2f7d38a264678a2db4a0d569a3313cb1 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/3240ef40c1dc9d13156bbd790ec2651a +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/332dfe4887cbad3adbd20e6609fa4960 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/3347cc312918facec5bbac684ea65715 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/3cd4037d8c32ad8fcdd5e3bbb8dfc35a +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/4016d2fd0b776ceb82fcbfbc5d2e26b1 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/43dc3e92cd09deb0fc54dd97b46935e9 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/452d7e35d5a012ae12fa7346fcf2239b +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/49c7cb5dd916ffc9e87ce3b989c92062 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/529a74a4530de52f6c3ebbf107ffe9f2 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/55a2847335c39261e1efe764deb18592 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/56c7eb172a7423728c45d0a751d198e3 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/6789fe765d536063c998330523bb12b9 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/678a2e392e656b8132f0420e4ec28ed6 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/6843f0414f73089579ae0f9fddf7b38f +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/6c7c58744c14732af9bf574870fdf07e +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/6cdbd6f171a27a578bcb07dd5bfa83a2 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/6e431ed1dfb5bbcbd33a5f9e069dd3ab +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/6f943f22c610e6417422e4a13e0bcc0d +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/73fbaa501dc0b072cf2c27fa7dfe0d91 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/7c886717bced4d59ab89e012b52f40de +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/821470da3272c8b99070972d4f4f58ca +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/88d843fcb07453d1057fac1e254fde0d +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/8956737a82f17db48d50e13f133aeefc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/8ab512c9b33ac90e699b73469d71f061 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/8b5a7992567ebbeb9a882d074778f8c8 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/8d71fe4f0e2910900097bdc07bf2d6af +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/8e1785ddbfab42cd2df0416eb3932253 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/9024d024c62c2668836b1e1b7b3b78cc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/928ed298f875a25727ca516f5c03f344 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/97c1e12a09973e0fb97f23a1dc496443 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/991576185140a77411185839fd0533f1 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/99e8d6370ba85ec4a61d953f5ed261af +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/9ee80730ab26986d507820ac7a288d5c +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/a3faca31eb11ba1a981535f9c8408282 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/a5c68a2aec806face32c749f380f1e14 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/a64dbcf0e4afe0985b1abd3e209d17cd +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/a6d357fbe03dae6f590180f6c5e0e148 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/aa58fb159780a7200a1bc4c6844cc5c4 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/aaba73a43e02d8c6550bae851f17e7a0 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/af26c017afcf68f1edd44a4c9bb942e4 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/b3defd466aec80b128284b8d85324630 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/b48ed8a3de3ca66055ee4fd18b16421f +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/ba9859d0d2b7d4d7d5b03ff3a71ed478 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/bcca522c6302f184f12fe0e8a7d7e71a +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/be8a0cd6c3605b9d7c22642609316a9f +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/c11c6d97cfc7ef7945fa87f14b44445c +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/c13fc73ceafa45876a901b3e775b83ae +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/c5f3450b5366b6fbdc4172ce089fba48 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/c982bb1e71844744a60dc9b4afcb2f49 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/cf24c3f1bb8adb1f168758f2bd9775c9 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/cffd775d018f68ce5dba1ee0d951a994 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/d3e5a199890ba7c706fc62c2b891714d +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/d584baf83d8a779d945f9668f902fa7c +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/d71b820ce5f8b310e466f517bd3a8e4b +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/d8dab59d17daf5a5081153e2ad7d09b4 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/dd4a8658311b7a2cd8effa6479827559 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/e11970a225a09526aac3f76d7ee91822 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/e3dd086dd858b5bff9cfd60a031c2091 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/e43bcf201d76cdf6e1fe345195c1cd9e +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/e945ca604ee0240455a5652953b3e495 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/ec33505f0e2ed4dd12951ecceffa3695 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/ee287313e28f341f83628dec0a353fa6 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/ee9a23832dc2a49ee6ec6d3f1d6a0e1f +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/ef2d6862f5fd690c5387cafd88944a9f +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/ef8c3824b85ed745cad651aadda4f2b8 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/f557612d05bb9fea499dce8352b3f0ca +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/f7cbd26ba1d28d48de824f0e94586655 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/f7f3056583a2454471a4a5f7200dcefa +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/f9c51fa87975943d31bc1bfd7cb684c6 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/ff9ed89418a3f78032b8f8184dd98e80 +0 -0
- data/spec/factories/page.rb +25 -25
- data/spec/models/page_spec.rb +92 -92
- data/spec/spec_helper.rb +89 -89
- data/spec/support/factory_girl.rb +15 -15
- metadata +1731 -1345
|
@@ -1,82 +1,84 @@
|
|
|
1
|
-
module Optimacms
|
|
2
|
-
module Mycontroller
|
|
3
|
-
extend ActiveSupport::Concern
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
included do
|
|
7
|
-
helper_method :site_page_path
|
|
8
|
-
end
|
|
9
|
-
|
|
10
|
-
def my_set_render
|
|
11
|
-
@is_optimacms = true
|
|
12
|
-
|
|
13
|
-
end
|
|
14
|
-
|
|
15
|
-
def is_optimacms
|
|
16
|
-
@is_optimacms
|
|
17
|
-
end
|
|
18
|
-
|
|
19
|
-
def default_render(*args)
|
|
20
|
-
if self.controller_name!='pages' && !@optimacms_tpl.nil? && @is_optimacms
|
|
21
|
-
render @optimacms_tpl, :layout=>@optimacms_layout and return
|
|
22
|
-
#(render :text => "hello", :layout => @optimacms_layout) and return
|
|
23
|
-
|
|
24
|
-
# http://stackoverflow.com/questions/21129587/ruby-on-rails-how-to-render-file-as-plain-text-without-any-html
|
|
25
|
-
#render :plain will set the content type to text/plain
|
|
26
|
-
#render :html will set the content type to text/html
|
|
27
|
-
#render :body will not set the content type header.
|
|
28
|
-
# render text: "some text". :plain does not work.
|
|
29
|
-
end
|
|
30
|
-
|
|
31
|
-
super
|
|
32
|
-
end
|
|
33
|
-
|
|
34
|
-
def optimacms_pagedata
|
|
35
|
-
@pagedata
|
|
36
|
-
end
|
|
37
|
-
|
|
38
|
-
def optimacms_set_pagedata(_pagedata)
|
|
39
|
-
@pagedata = _pagedata
|
|
40
|
-
|
|
41
|
-
end
|
|
42
|
-
|
|
43
|
-
def my_set_render_template(tpl_view, tpl_layout)
|
|
44
|
-
@optimacms_tpl = tpl_view
|
|
45
|
-
@optimacms_layout = tpl_layout
|
|
46
|
-
end
|
|
47
|
-
|
|
48
|
-
def my_set_meta(meta)
|
|
49
|
-
@optimacms_meta_title = meta[:title]
|
|
50
|
-
@optimacms_meta_keywords = meta[:keywords]
|
|
51
|
-
@optimacms_meta_description = meta[:description]
|
|
52
|
-
end
|
|
53
|
-
|
|
54
|
-
def site_page_path(name, p={})
|
|
55
|
-
get_page_path(name, p)
|
|
56
|
-
end
|
|
57
|
-
|
|
58
|
-
def get_page_path(page_name, p={})
|
|
59
|
-
# get from cache
|
|
60
|
-
@cache_page_urls ||= {}
|
|
61
|
-
url = @cache_page_urls.fetch(page_name.to_s, nil)
|
|
62
|
-
|
|
63
|
-
if url.nil?
|
|
64
|
-
page = Page.find_by_name(page_name)
|
|
65
|
-
url = page.url if page
|
|
66
|
-
end
|
|
67
|
-
|
|
68
|
-
return nil if url.nil?
|
|
69
|
-
|
|
70
|
-
# set to cache
|
|
71
|
-
@cache_page_urls ||= {}
|
|
72
|
-
@cache_page_urls[page_name.to_s] = url
|
|
73
|
-
|
|
74
|
-
#
|
|
75
|
-
res = PageServices::PageRouteService.make_url url, p
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
1
|
+
module Optimacms
|
|
2
|
+
module Mycontroller
|
|
3
|
+
extend ActiveSupport::Concern
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
included do
|
|
7
|
+
helper_method :site_page_path
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def my_set_render
|
|
11
|
+
@is_optimacms = true
|
|
12
|
+
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def is_optimacms
|
|
16
|
+
@is_optimacms
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def default_render(*args)
|
|
20
|
+
if self.controller_name!='pages' && !@optimacms_tpl.nil? && @is_optimacms
|
|
21
|
+
render @optimacms_tpl, :layout=>@optimacms_layout and return
|
|
22
|
+
#(render :text => "hello", :layout => @optimacms_layout) and return
|
|
23
|
+
|
|
24
|
+
# http://stackoverflow.com/questions/21129587/ruby-on-rails-how-to-render-file-as-plain-text-without-any-html
|
|
25
|
+
#render :plain will set the content type to text/plain
|
|
26
|
+
#render :html will set the content type to text/html
|
|
27
|
+
#render :body will not set the content type header.
|
|
28
|
+
# render text: "some text". :plain does not work.
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
super
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def optimacms_pagedata
|
|
35
|
+
@pagedata
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def optimacms_set_pagedata(_pagedata)
|
|
39
|
+
@pagedata = _pagedata
|
|
40
|
+
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def my_set_render_template(tpl_view, tpl_layout)
|
|
44
|
+
@optimacms_tpl = tpl_view
|
|
45
|
+
@optimacms_layout = tpl_layout
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
def my_set_meta(meta)
|
|
49
|
+
@optimacms_meta_title = meta[:title]
|
|
50
|
+
@optimacms_meta_keywords = meta[:keywords]
|
|
51
|
+
@optimacms_meta_description = meta[:description]
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
def site_page_path(name, p={})
|
|
55
|
+
get_page_path(name, p)
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
def get_page_path(page_name, p={})
|
|
59
|
+
# get from cache
|
|
60
|
+
@cache_page_urls ||= {}
|
|
61
|
+
url = @cache_page_urls.fetch(page_name.to_s, nil)
|
|
62
|
+
|
|
63
|
+
if url.nil?
|
|
64
|
+
page = Page.find_by_name(page_name)
|
|
65
|
+
url = page.url if page
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
return nil if url.nil?
|
|
69
|
+
|
|
70
|
+
# set to cache
|
|
71
|
+
@cache_page_urls ||= {}
|
|
72
|
+
@cache_page_urls[page_name.to_s] = url
|
|
73
|
+
|
|
74
|
+
#
|
|
75
|
+
res = PageServices::PageRouteService.make_url url, p
|
|
76
|
+
|
|
77
|
+
return nil if res.nil?
|
|
78
|
+
|
|
79
|
+
'/'+res
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
end
|
|
83
|
+
end
|
|
84
|
+
|
|
@@ -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,157 +1,176 @@
|
|
|
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
|
-
parsed_url = page_row.parsed_url
|
|
113
|
-
|
|
114
|
-
#if (preg_match('/' . $parsed_url . '/', $url, $values_matches)) {
|
|
115
|
-
m_params_in_url = url.scan /#{parsed_url}/
|
|
116
|
-
|
|
117
|
-
return nil if m_params_in_url.empty?
|
|
118
|
-
|
|
119
|
-
values_matches = m_params_in_url[0]
|
|
120
|
-
|
|
121
|
-
# search for variables in URL
|
|
122
|
-
#keys_matches = page_row.url.scan /\{\$([^}\/]+)\}/
|
|
123
|
-
keys_matches = page_row.url.scan /\:(#{REGEX_VARIABLE})/
|
|
124
|
-
if !keys_matches.empty?
|
|
125
|
-
keys_matches = keys_matches.map{|r| r[0]}
|
|
126
|
-
if keys_matches.count == values_matches.count
|
|
127
|
-
res = {}
|
|
128
|
-
values_matches.each_with_index do |val, key|
|
|
129
|
-
res[keys_matches[key].to_sym] = val
|
|
130
|
-
end
|
|
131
|
-
#url_vars = array_combine($keys_matches, $values_matches);
|
|
132
|
-
return res
|
|
133
|
-
else
|
|
134
|
-
#user_error('Keys and values has different number of elements');
|
|
135
|
-
return {}
|
|
136
|
-
end
|
|
137
|
-
|
|
138
|
-
elsif m_params_in_url.count == 0
|
|
139
|
-
# no variables found, and parsed_url has no variables => return empty []
|
|
140
|
-
return {}
|
|
141
|
-
else
|
|
142
|
-
# smth wrong
|
|
143
|
-
return {}
|
|
144
|
-
end
|
|
145
|
-
|
|
146
|
-
end
|
|
147
|
-
|
|
148
|
-
def self.make_url(u,
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
res
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
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
|
+
parsed_url = page_row.parsed_url
|
|
113
|
+
|
|
114
|
+
#if (preg_match('/' . $parsed_url . '/', $url, $values_matches)) {
|
|
115
|
+
m_params_in_url = url.scan /#{parsed_url}/
|
|
116
|
+
|
|
117
|
+
return nil if m_params_in_url.empty?
|
|
118
|
+
|
|
119
|
+
values_matches = m_params_in_url[0]
|
|
120
|
+
|
|
121
|
+
# search for variables in URL
|
|
122
|
+
#keys_matches = page_row.url.scan /\{\$([^}\/]+)\}/
|
|
123
|
+
keys_matches = page_row.url.scan /\:(#{REGEX_VARIABLE})/
|
|
124
|
+
if !keys_matches.empty?
|
|
125
|
+
keys_matches = keys_matches.map{|r| r[0]}
|
|
126
|
+
if keys_matches.count == values_matches.count
|
|
127
|
+
res = {}
|
|
128
|
+
values_matches.each_with_index do |val, key|
|
|
129
|
+
res[keys_matches[key].to_sym] = val
|
|
130
|
+
end
|
|
131
|
+
#url_vars = array_combine($keys_matches, $values_matches);
|
|
132
|
+
return res
|
|
133
|
+
else
|
|
134
|
+
#user_error('Keys and values has different number of elements');
|
|
135
|
+
return {}
|
|
136
|
+
end
|
|
137
|
+
|
|
138
|
+
elsif m_params_in_url.count == 0
|
|
139
|
+
# no variables found, and parsed_url has no variables => return empty []
|
|
140
|
+
return {}
|
|
141
|
+
else
|
|
142
|
+
# smth wrong
|
|
143
|
+
return {}
|
|
144
|
+
end
|
|
145
|
+
|
|
146
|
+
end
|
|
147
|
+
|
|
148
|
+
def self.make_url(u, params_extra={})
|
|
149
|
+
p = params_extra.keys.map{|x| x.to_sym}
|
|
150
|
+
|
|
151
|
+
p_used = []
|
|
152
|
+
res = u.gsub(/\:#{REGEX_VARIABLE}/) do |name|
|
|
153
|
+
p_used << name[1..-1].to_sym
|
|
154
|
+
(params_extra[name[1..-1].to_sym] || '')
|
|
155
|
+
end
|
|
156
|
+
|
|
157
|
+
# add extra params
|
|
158
|
+
p_not_used = p - p_used - [:controller, :action, :only_path, :url]
|
|
159
|
+
|
|
160
|
+
#
|
|
161
|
+
a_extra = []
|
|
162
|
+
p_not_used.each do |name|
|
|
163
|
+
a_extra << "#{name}=#{(params_extra[name] || '')}"
|
|
164
|
+
end
|
|
165
|
+
if a_extra.length>0
|
|
166
|
+
res = res + '?'+a_extra.join('&')
|
|
167
|
+
end
|
|
168
|
+
|
|
169
|
+
#
|
|
170
|
+
#res.gsub! /\?$/, ''
|
|
171
|
+
res
|
|
172
|
+
end
|
|
173
|
+
end
|
|
174
|
+
|
|
175
|
+
end
|
|
157
176
|
end
|