zen 0.3 → 0.4
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.
- data/.gems +3 -2
- data/.rvmrc +1 -1
- data/.travis.yml +5 -0
- data/.yardopts +2 -1
- data/LICENSE +1 -1
- data/README.md +28 -24
- data/Rakefile +5 -2
- data/guide/asset_management.md +6 -6
- data/guide/autosaving_forms.md +42 -0
- data/guide/changelog.md +41 -0
- data/guide/faq.md +49 -0
- data/guide/getting_started.md +24 -13
- data/guide/hacking.md +40 -9
- data/guide/images/categories/categories.png +0 -0
- data/guide/images/categories/category_groups.png +0 -0
- data/guide/images/categories/new_category.png +0 -0
- data/guide/images/categories/new_category_group.png +0 -0
- data/guide/images/comments/comments.png +0 -0
- data/guide/images/comments/edit_comment.png +0 -0
- data/guide/images/custom_fields/custom_field_groups.png +0 -0
- data/guide/images/custom_fields/custom_field_types.png +0 -0
- data/guide/images/custom_fields/custom_fields.png +0 -0
- data/guide/images/custom_fields/edit_custom_field_general.png +0 -0
- data/guide/images/custom_fields/edit_custom_field_group.png +0 -0
- data/guide/images/custom_fields/edit_custom_field_settings.png +0 -0
- data/guide/images/custom_fields/edit_custom_field_type.png +0 -0
- data/guide/images/dashboard/added.png +0 -0
- data/guide/images/dashboard/columns.png +0 -0
- data/guide/images/dashboard/dashboard.png +0 -0
- data/guide/images/dashboard/options.png +0 -0
- data/guide/images/menus/edit_menu.png +0 -0
- data/guide/images/menus/edit_menu_item.png +0 -0
- data/guide/images/menus/menu_item_hierarchy.png +0 -0
- data/guide/images/menus/menu_items.png +0 -0
- data/guide/images/menus/menus.png +0 -0
- data/guide/images/sections/edit_entry.png +0 -0
- data/guide/images/sections/edit_entry_categories.png +0 -0
- data/guide/images/sections/edit_entry_general.png +0 -0
- data/guide/images/sections/edit_entry_meta.png +0 -0
- data/guide/images/sections/edit_section_comments.png +0 -0
- data/guide/images/sections/edit_section_general.png +0 -0
- data/guide/images/sections/edit_section_groups.png +0 -0
- data/guide/images/sections/entries.png +0 -0
- data/guide/images/sections/sections.png +0 -0
- data/guide/images/settings/overview_general.png +0 -0
- data/guide/images/settings/overview_security.png +0 -0
- data/guide/images/settings/overview_user.png +0 -0
- data/guide/images/users/edit_user.png +0 -0
- data/guide/images/users/edit_user_group.png +0 -0
- data/guide/images/users/edit_user_group_permissions.png +0 -0
- data/guide/images/users/edit_user_permissions.png +0 -0
- data/guide/images/users/overview.png +0 -0
- data/guide/images/users/user_groups_overview.png +0 -0
- data/guide/installation.md +7 -1
- data/guide/javascript.md +36 -273
- data/guide/javascript/zen_autosave.md +26 -0
- data/guide/javascript/zen_editor.md +83 -0
- data/guide/javascript/zen_hash.md +34 -0
- data/guide/javascript/zen_htmltable.md +78 -0
- data/guide/javascript/zen_tabs.md +44 -0
- data/guide/javascript/zen_window.md +49 -0
- data/guide/zen_compared.md +201 -0
- data/lib/vendor/sequel_sluggable.rb +1 -1
- data/lib/zen.rb +64 -44
- data/lib/zen/asset_groups.rb +10 -10
- data/lib/zen/bin/create.rb +8 -1
- data/lib/zen/helper/breadcrumb.rb +4 -12
- data/lib/zen/helper/controller.rb +209 -6
- data/lib/zen/helper/locale.rb +19 -0
- data/lib/zen/helper/search.rb +1 -1
- data/lib/zen/helper/stacked_aspect.rb +7 -43
- data/lib/zen/helper/theme.rb +3 -3
- data/lib/zen/language.rb +5 -10
- data/lib/zen/language/translation.rb +1 -1
- data/lib/zen/layout/admin.xhtml +41 -25
- data/lib/zen/layout/login.xhtml +8 -3
- data/lib/zen/migrator.rb +54 -0
- data/lib/zen/model/helper.rb +20 -1
- data/lib/zen/model/init.rb +2 -0
- data/lib/zen/model/plugin/events.rb +158 -0
- data/lib/zen/package.rb +32 -6
- data/lib/zen/package/all.rb +1 -0
- data/lib/zen/package/categories/lib/categories.rb +6 -6
- data/lib/zen/package/categories/lib/categories/controller/categories.rb +20 -83
- data/lib/zen/package/categories/lib/categories/controller/category_groups.rb +23 -74
- data/lib/zen/package/categories/lib/categories/model/category.rb +58 -1
- data/lib/zen/package/categories/lib/categories/model/category_group.rb +62 -2
- data/lib/zen/package/categories/lib/categories/view/admin/categories/form.xhtml +46 -40
- data/lib/zen/package/categories/lib/categories/view/admin/categories/index.xhtml +74 -75
- data/lib/zen/package/categories/lib/categories/view/admin/category-groups/form.xhtml +27 -24
- data/lib/zen/package/categories/lib/categories/view/admin/category-groups/index.xhtml +83 -86
- data/lib/zen/package/comments/lib/comments.rb +5 -5
- data/lib/zen/package/comments/lib/comments/controller/comments.rb +12 -64
- data/lib/zen/package/comments/lib/comments/controller/comments_form.rb +4 -22
- data/lib/zen/package/comments/lib/comments/model/comment.rb +65 -16
- data/lib/zen/package/comments/lib/comments/view/admin/comments/form.xhtml +52 -49
- data/lib/zen/package/comments/lib/comments/view/admin/comments/index.xhtml +52 -60
- data/lib/zen/package/comments/migrations/1308774099_comment_status.rb +1 -1
- data/lib/zen/package/custom_fields/lib/custom_fields.rb +11 -13
- data/lib/zen/package/custom_fields/lib/custom_fields/blue_form_parameters.rb +29 -13
- data/lib/zen/package/custom_fields/lib/custom_fields/controller/custom_field_groups.rb +21 -50
- data/lib/zen/package/custom_fields/lib/custom_fields/controller/custom_field_types.rb +27 -71
- data/lib/zen/package/custom_fields/lib/custom_fields/controller/custom_fields.rb +25 -78
- data/lib/zen/package/custom_fields/lib/custom_fields/model/custom_field.rb +48 -1
- data/lib/zen/package/custom_fields/lib/custom_fields/model/custom_field_group.rb +35 -1
- data/lib/zen/package/custom_fields/lib/custom_fields/model/custom_field_method.rb +3 -0
- data/lib/zen/package/custom_fields/lib/custom_fields/model/custom_field_type.rb +40 -1
- data/lib/zen/package/custom_fields/lib/custom_fields/model/custom_field_value.rb +1 -0
- data/lib/zen/package/custom_fields/lib/custom_fields/view/admin/custom-field-groups/form.xhtml +29 -26
- data/lib/zen/package/custom_fields/lib/custom_fields/view/admin/custom-field-groups/index.xhtml +96 -100
- data/lib/zen/package/custom_fields/lib/custom_fields/view/admin/custom-field-types/form.xhtml +56 -53
- data/lib/zen/package/custom_fields/lib/custom_fields/view/admin/custom-field-types/index.xhtml +82 -82
- data/lib/zen/package/custom_fields/lib/custom_fields/view/admin/custom-fields/form.xhtml +88 -85
- data/lib/zen/package/custom_fields/lib/custom_fields/view/admin/custom-fields/index.xhtml +83 -80
- data/lib/zen/package/dashboard/lib/dashboard.rb +28 -0
- data/lib/zen/package/dashboard/lib/dashboard/controller/dashboard.rb +154 -0
- data/lib/zen/package/dashboard/lib/dashboard/language/en/dashboard.rb +35 -0
- data/lib/zen/package/dashboard/lib/dashboard/language/nl/dashboard.rb +36 -0
- data/lib/zen/package/dashboard/lib/dashboard/model/widget.rb +45 -0
- data/lib/zen/package/dashboard/lib/dashboard/public/admin/dashboard/css/dashboard.css +74 -0
- data/lib/zen/package/dashboard/lib/dashboard/public/admin/dashboard/js/dashboard.js +102 -0
- data/lib/zen/package/dashboard/lib/dashboard/view/admin/index.xhtml +29 -0
- data/lib/zen/package/dashboard/lib/dashboard/view/admin/widget/welcome.xhtml +28 -0
- data/lib/zen/package/dashboard/lib/dashboard/widget.rb +292 -0
- data/lib/zen/package/dashboard/lib/dashboard/widget/welcome.rb +9 -0
- data/lib/zen/package/dashboard/migrations/1326411254_create_schema.rb +28 -0
- data/lib/zen/package/extensions/lib/extensions.rb +5 -5
- data/lib/zen/package/extensions/lib/extensions/view/admin/extensions/index.xhtml +72 -67
- data/lib/zen/package/menu.rb +6 -1
- data/lib/zen/package/menus/lib/menus.rb +6 -4
- data/lib/zen/package/menus/lib/menus/controller/menu_items.rb +69 -104
- data/lib/zen/package/menus/lib/menus/controller/menus.rb +19 -76
- data/lib/zen/package/menus/lib/menus/helper/menu.rb +54 -38
- data/lib/zen/package/menus/lib/menus/helper/menu_frontend.rb +7 -13
- data/lib/zen/package/menus/lib/menus/model/menu.rb +158 -2
- data/lib/zen/package/menus/lib/menus/model/menu_item.rb +73 -10
- data/lib/zen/package/menus/lib/menus/public/admin/menus/css/menus.css +47 -0
- data/lib/zen/package/menus/lib/menus/public/admin/menus/js/lib/nested_sortables.js +549 -0
- data/lib/zen/package/menus/lib/menus/public/admin/menus/js/menu_items.js +38 -0
- data/lib/zen/package/menus/lib/menus/view/admin/menu-items/form.xhtml +51 -61
- data/lib/zen/package/menus/lib/menus/view/admin/menu-items/index.xhtml +18 -81
- data/lib/zen/package/menus/lib/menus/view/admin/menus/form.xhtml +49 -44
- data/lib/zen/package/menus/lib/menus/view/admin/menus/index.xhtml +81 -83
- data/lib/zen/package/sections/lib/sections.rb +9 -4
- data/lib/zen/package/sections/lib/sections/controller/section_entries.rb +80 -132
- data/lib/zen/package/sections/lib/sections/controller/sections.rb +27 -73
- data/lib/zen/package/sections/lib/sections/helper/section.rb +44 -1
- data/lib/zen/package/sections/lib/sections/language/en/section_entries.rb +2 -0
- data/lib/zen/package/sections/lib/sections/language/nl/section_entries.rb +2 -0
- data/lib/zen/package/sections/lib/sections/model/section.rb +48 -1
- data/lib/zen/package/sections/lib/sections/model/section_entry.rb +55 -5
- data/lib/zen/package/sections/lib/sections/model/section_entry_status.rb +2 -0
- data/lib/zen/package/sections/lib/sections/view/admin/section-entries/form.xhtml +76 -67
- data/lib/zen/package/sections/lib/sections/view/admin/section-entries/index.xhtml +74 -79
- data/lib/zen/package/sections/lib/sections/view/admin/section-entries/recent_entries.xhtml +45 -0
- data/lib/zen/package/sections/lib/sections/view/admin/sections/form.xhtml +119 -0
- data/lib/zen/package/sections/lib/sections/view/admin/sections/index.xhtml +96 -0
- data/lib/zen/package/sections/lib/sections/widget/recent_entries.rb +14 -0
- data/lib/zen/package/sections/migrations/1308813320_section_entry_statuses.rb +1 -1
- data/lib/zen/package/settings/lib/settings.rb +14 -5
- data/lib/zen/package/settings/lib/settings/controller/settings.rb +4 -4
- data/lib/zen/package/settings/lib/settings/language/nl/settings.rb +1 -1
- data/lib/zen/package/settings/lib/settings/setting.rb +1 -1
- data/lib/zen/package/settings/lib/settings/view/admin/settings/index.xhtml +21 -17
- data/lib/zen/package/users/lib/users.rb +18 -19
- data/lib/zen/package/users/lib/users/controller/user_groups.rb +23 -50
- data/lib/zen/package/users/lib/users/controller/users.rb +57 -89
- data/lib/zen/package/users/lib/users/helper/acl.rb +1 -0
- data/lib/zen/package/users/lib/users/language/en/user_groups.rb +1 -0
- data/lib/zen/package/users/lib/users/language/en/users.rb +2 -1
- data/lib/zen/package/users/lib/users/language/nl/user_groups.rb +1 -0
- data/lib/zen/package/users/lib/users/language/nl/users.rb +2 -1
- data/lib/zen/package/users/lib/users/model/permission.rb +13 -0
- data/lib/zen/package/users/lib/users/model/user.rb +57 -4
- data/lib/zen/package/users/lib/users/model/user_group.rb +37 -3
- data/lib/zen/package/users/lib/users/model/user_status.rb +4 -0
- data/lib/zen/package/users/lib/users/public/admin/{css/users/permissions.css → users/css/users.css} +0 -0
- data/lib/zen/package/users/lib/users/public/admin/{js/users/permissions.js → users/js/users.js} +4 -2
- data/lib/zen/package/users/lib/users/view/admin/user-groups/form.xhtml +51 -47
- data/lib/zen/package/users/lib/users/view/admin/user-groups/index.xhtml +62 -69
- data/lib/zen/package/users/lib/users/view/admin/users/form.xhtml +92 -82
- data/lib/zen/package/users/lib/users/view/admin/users/index.xhtml +68 -66
- data/lib/zen/package/users/lib/users/view/admin/users/login.xhtml +36 -28
- data/lib/zen/package/users/lib/users/view/admin/users/permissions.xhtml +5 -7
- data/lib/zen/package/users/lib/users/view/admin/users/register.xhtml +47 -41
- data/lib/zen/package/users/migrations/1320272365_status_ids.rb +1 -1
- data/lib/zen/public/admin/{js/vendor/mootools → mootools/js}/core.js +113 -108
- data/lib/zen/public/admin/{js/vendor/mootools → mootools/js}/more.js +99 -6
- data/lib/zen/public/admin/zen/css/buttons.css +106 -0
- data/lib/zen/public/admin/{css/zen → zen/css}/datepicker.css +45 -30
- data/lib/zen/public/admin/zen/css/editor.css +69 -0
- data/lib/zen/public/admin/{css/zen → zen/css}/forms.css +28 -30
- data/lib/zen/public/admin/zen/css/general.css +183 -0
- data/lib/zen/public/admin/zen/css/layout.css +224 -0
- data/lib/zen/public/admin/zen/css/messages.css +34 -0
- data/lib/zen/public/admin/{css/zen → zen/css}/reset.css +4 -9
- data/lib/zen/public/admin/zen/css/tables.css +57 -0
- data/lib/zen/public/admin/zen/css/tabs.css +84 -0
- data/lib/zen/public/admin/zen/css/window.css +74 -0
- data/lib/zen/public/admin/{images/zen → zen/images}/icons/asc.png +0 -0
- data/lib/zen/public/admin/{images/zen → zen/images}/icons/bold.png +0 -0
- data/lib/zen/public/admin/zen/images/icons/box.png +0 -0
- data/lib/zen/public/admin/zen/images/icons/categories.png +0 -0
- data/lib/zen/public/admin/{images/zen → zen/images}/icons/close.png +0 -0
- data/lib/zen/public/admin/zen/images/icons/comment.png +0 -0
- data/lib/zen/public/admin/{images/zen → zen/images}/icons/desc.png +0 -0
- data/lib/zen/public/admin/{images/zen → zen/images}/icons/edit.png +0 -0
- data/lib/zen/public/admin/{images/zen → zen/images}/icons/error.png +0 -0
- data/lib/zen/public/admin/zen/images/icons/external.png +0 -0
- data/lib/zen/public/admin/zen/images/icons/globe.png +0 -0
- data/lib/zen/public/admin/{images/zen → zen/images}/icons/italic.png +0 -0
- data/lib/zen/public/admin/{images/zen → zen/images}/icons/link.png +0 -0
- data/lib/zen/public/admin/zen/images/icons/lock.png +0 -0
- data/lib/zen/public/admin/{images/zen → zen/images}/icons/ol.png +0 -0
- data/lib/zen/public/admin/zen/images/icons/pages.png +0 -0
- data/lib/zen/public/admin/{images/zen → zen/images}/icons/preview.png +0 -0
- data/lib/zen/public/admin/zen/images/icons/relation.png +0 -0
- data/lib/zen/public/admin/zen/images/icons/settings.png +0 -0
- data/lib/zen/public/admin/zen/images/icons/template.png +0 -0
- data/lib/zen/public/admin/{images/zen → zen/images}/icons/ul.png +0 -0
- data/lib/zen/public/admin/{images/zen → zen/images}/icons/user.png +0 -0
- data/lib/zen/public/admin/zen/images/icons/user_group.png +0 -0
- data/lib/zen/public/admin/{js/zen → zen/js}/index.js +21 -9
- data/lib/zen/public/admin/zen/js/lib/autosave.js +185 -0
- data/lib/zen/public/admin/zen/js/lib/base.js +60 -0
- data/lib/zen/public/admin/{js/vendor → zen/js/lib}/datepicker.js +52 -28
- data/lib/zen/public/admin/{js/zen → zen/js}/lib/editor.js +23 -34
- data/lib/zen/public/admin/{js/zen → zen/js}/lib/editor/markdown.js +5 -1
- data/lib/zen/public/admin/{js/zen → zen/js}/lib/editor/textile.js +4 -0
- data/lib/zen/public/admin/zen/js/lib/hash.js +218 -0
- data/lib/zen/public/admin/{js/zen → zen/js}/lib/html_table.js +5 -0
- data/lib/zen/public/admin/zen/js/lib/tabs.js +194 -0
- data/lib/zen/public/admin/{js/zen → zen/js}/lib/window.js +54 -29
- data/lib/zen/security.rb +50 -0
- data/lib/zen/spec/helper.rb +5 -120
- data/lib/zen/spec/helper/capybara.rb +75 -0
- data/lib/zen/spec/helper/general.rb +75 -0
- data/lib/zen/spec/simplecov.rb +1 -0
- data/lib/zen/task/build.rake +2 -21
- data/lib/zen/task/clean.rake +1 -10
- data/lib/zen/task/db.rake +4 -10
- data/lib/zen/task/package.rake +2 -5
- data/lib/zen/task/setup.rake +1 -1
- data/lib/zen/task/test.rake +6 -6
- data/lib/zen/task/theme.rake +2 -5
- data/lib/zen/theme.rb +26 -22
- data/lib/zen/version.rb +1 -1
- data/lib/zen/view/bottom.xhtml +2 -3
- data/lib/zen/view/search.xhtml +3 -5
- data/proto/app/config/config.rb.erb +1 -1
- data/proto/app/theme/default/index.xhtml +116 -20
- data/proto/app/theme/partials/head.xhtml +9 -0
- data/proto/app/theme/partials/sidebar.xhtml +40 -0
- data/proto/app/theme/theme.rb +3 -0
- data/spec/Rakefile +1 -2
- data/spec/fixtures/zen/helper/stacked_aspect.rb +54 -0
- data/spec/fixtures/zen/package/dashboard/controller/widget.rb +15 -0
- data/spec/fixtures/zen/package/dashboard/widget.rb +5 -0
- data/spec/fixtures/zen/theme/theme.rb +2 -2
- data/spec/helper.rb +19 -10
- data/spec/zen/controller/admin_controller.rb +3 -3
- data/spec/zen/controller/main_controller.rb +7 -7
- data/spec/zen/controller/preview.rb +3 -3
- data/spec/zen/event.rb +4 -4
- data/spec/zen/helper/breadcrumb.rb +4 -8
- data/spec/zen/helper/controller.rb +47 -4
- data/spec/zen/helper/locale.rb +3 -3
- data/spec/zen/helper/message.rb +4 -4
- data/spec/zen/helper/stacked_aspect.rb +40 -0
- data/spec/zen/helper/theme.rb +9 -9
- data/spec/zen/language.rb +8 -8
- data/spec/zen/markup.rb +6 -6
- data/spec/zen/package.rb +11 -9
- data/spec/zen/package/categories/controller/categories.rb +56 -24
- data/spec/zen/package/categories/controller/category_groups.rb +55 -23
- data/spec/zen/package/categories/helper/category.rb +5 -5
- data/spec/zen/package/categories/helper/category_frontend.rb +5 -5
- data/spec/zen/package/comments/anti_spam.rb +4 -4
- data/spec/zen/package/comments/controller/comments.rb +95 -24
- data/spec/zen/package/comments/controller/comments_form.rb +31 -26
- data/spec/zen/package/comments/helper/comment.rb +3 -3
- data/spec/zen/package/comments/helper/comment_frontend.rb +6 -6
- data/spec/zen/package/custom_fields/blue_form_parameters.rb +8 -8
- data/spec/zen/package/custom_fields/controller/custom_field_groups.rb +58 -27
- data/spec/zen/package/custom_fields/controller/custom_field_types.rb +57 -27
- data/spec/zen/package/custom_fields/controller/custom_fields.rb +58 -27
- data/spec/zen/package/custom_fields/helper/custom_field.rb +7 -7
- data/spec/zen/package/dashboard/controller/dashboard.rb +147 -0
- data/spec/zen/package/dashboard/widget.rb +56 -0
- data/spec/zen/package/extensions/controller/extensions.rb +4 -4
- data/spec/zen/package/menus/controller/menu_items.rb +48 -39
- data/spec/zen/package/menus/controller/menus.rb +55 -24
- data/spec/zen/package/menus/helper/menu.rb +6 -14
- data/spec/zen/package/menus/helper/menu_frontend.rb +7 -7
- data/spec/zen/package/menus/model/menu.rb +121 -0
- data/spec/zen/package/menus/model/menu_item.rb +34 -0
- data/spec/zen/package/sections/controller/section_entries.rb +104 -39
- data/spec/zen/package/sections/controller/sections.rb +60 -27
- data/spec/zen/package/sections/helper/section.rb +5 -5
- data/spec/zen/package/sections/helper/section_frontend.rb +9 -9
- data/spec/zen/package/sections/widget.rb +44 -0
- data/spec/zen/package/settings/controller/settings.rb +18 -16
- data/spec/zen/package/settings/settings.rb +12 -12
- data/spec/zen/package/users/controller/user_groups.rb +61 -29
- data/spec/zen/package/users/controller/users.rb +118 -39
- data/spec/zen/package/users/helper/access.rb +3 -3
- data/spec/zen/package/users/helper/acl.rb +4 -4
- data/spec/zen/package/users/helper/users.rb +5 -5
- data/spec/zen/security.rb +25 -0
- data/spec/zen/theme.rb +20 -18
- data/spec/zen/validation.rb +5 -5
- data/spec/zen/vendor/sequel_sluggable.rb +12 -0
- data/zen.gemspec +27 -4
- metadata +182 -124
- data/AUTHORS +0 -4
- data/guide/_static/categories/categories.png +0 -0
- data/guide/_static/categories/category_groups.png +0 -0
- data/guide/_static/categories/new_category.png +0 -0
- data/guide/_static/categories/new_category_group.png +0 -0
- data/guide/_static/comments/comments.png +0 -0
- data/guide/_static/comments/edit_comment.png +0 -0
- data/guide/_static/custom_fields/custom_field_groups.png +0 -0
- data/guide/_static/custom_fields/custom_field_types.png +0 -0
- data/guide/_static/custom_fields/custom_fields.png +0 -0
- data/guide/_static/custom_fields/edit_custom_field_general.png +0 -0
- data/guide/_static/custom_fields/edit_custom_field_group.png +0 -0
- data/guide/_static/custom_fields/edit_custom_field_settings.png +0 -0
- data/guide/_static/custom_fields/edit_custom_field_type.png +0 -0
- data/guide/_static/menus/edit_menu.png +0 -0
- data/guide/_static/menus/edit_menu_item.png +0 -0
- data/guide/_static/menus/menu_items.png +0 -0
- data/guide/_static/menus/menus.png +0 -0
- data/guide/_static/sections/edit_entry.png +0 -0
- data/guide/_static/sections/edit_entry_categories.png +0 -0
- data/guide/_static/sections/edit_entry_general.png +0 -0
- data/guide/_static/sections/edit_entry_meta.png +0 -0
- data/guide/_static/sections/edit_section_comments.png +0 -0
- data/guide/_static/sections/edit_section_general.png +0 -0
- data/guide/_static/sections/edit_section_groups.png +0 -0
- data/guide/_static/sections/entries.png +0 -0
- data/guide/_static/sections/sections.png +0 -0
- data/guide/_static/settings/overview_general.png +0 -0
- data/guide/_static/settings/overview_security.png +0 -0
- data/guide/_static/settings/overview_user.png +0 -0
- data/guide/_static/users/edit_user.png +0 -0
- data/guide/_static/users/edit_user_group.png +0 -0
- data/guide/_static/users/edit_user_group_permissions.png +0 -0
- data/guide/_static/users/edit_user_permissions.png +0 -0
- data/guide/_static/users/overview.png +0 -0
- data/guide/_static/users/user_groups_overview.png +0 -0
- data/lib/zen/controller/translations.rb +0 -49
- data/lib/zen/package/sections/lib/sections/view/admin/form.xhtml +0 -113
- data/lib/zen/package/sections/lib/sections/view/admin/index.xhtml +0 -97
- data/lib/zen/public/admin/css/zen/buttons.css +0 -46
- data/lib/zen/public/admin/css/zen/editor.css +0 -88
- data/lib/zen/public/admin/css/zen/general.css +0 -109
- data/lib/zen/public/admin/css/zen/grid.css +0 -100
- data/lib/zen/public/admin/css/zen/layout.css +0 -184
- data/lib/zen/public/admin/css/zen/messages.css +0 -54
- data/lib/zen/public/admin/css/zen/tables.css +0 -97
- data/lib/zen/public/admin/css/zen/tabs.css +0 -47
- data/lib/zen/public/admin/css/zen/window.css +0 -73
- data/lib/zen/public/admin/images/zen/icons/accept.png +0 -0
- data/lib/zen/public/admin/images/zen/icons/add.png +0 -0
- data/lib/zen/public/admin/images/zen/icons/back.png +0 -0
- data/lib/zen/public/admin/images/zen/icons/delete.png +0 -0
- data/lib/zen/public/admin/images/zen/icons/help.png +0 -0
- data/lib/zen/public/admin/images/zen/icons/info.png +0 -0
- data/lib/zen/public/admin/images/zen/icons/logout.png +0 -0
- data/lib/zen/public/admin/images/zen/icons/pdf.png +0 -0
- data/lib/zen/public/admin/images/zen/icons/view.png +0 -0
- data/lib/zen/public/admin/js/zen/lib/tabs.js +0 -207
- data/lib/zen/view/main.xhtml +0 -19
|
@@ -121,7 +121,7 @@ module Sequel
|
|
|
121
121
|
# @param [String] String to be slugged
|
|
122
122
|
# @return [String]
|
|
123
123
|
def to_slug(value)
|
|
124
|
-
value.chomp.downcase.gsub(/[^a-z0-
|
|
124
|
+
value.chomp.downcase.gsub(/[^a-z0-9_]+/, '-')
|
|
125
125
|
end
|
|
126
126
|
|
|
127
127
|
# Sets target column with source column which
|
data/lib/zen.rb
CHANGED
|
@@ -1,15 +1,14 @@
|
|
|
1
1
|
require 'ramaze'
|
|
2
|
+
require 'json'
|
|
2
3
|
|
|
3
4
|
Ramaze.setup(:verbose => false) do
|
|
4
|
-
gem 'sequel' , ['~> 3.
|
|
5
|
+
gem 'sequel' , ['~> 3.33.0']
|
|
5
6
|
gem 'bcrypt-ruby' , ['~> 3.0.1'], :lib => 'bcrypt'
|
|
6
7
|
gem 'loofah' , ['~> 1.2.0']
|
|
7
8
|
gem 'ramaze-asset', ['~> 0.2.3'], :lib => 'ramaze/asset'
|
|
8
9
|
end
|
|
9
10
|
|
|
10
|
-
unless
|
|
11
|
-
$LOAD_PATH.unshift(__DIR__)
|
|
12
|
-
end
|
|
11
|
+
$:.unshift(__DIR__) unless $:.include?(__DIR__)
|
|
13
12
|
|
|
14
13
|
##
|
|
15
14
|
# Main module for Zen, all other modules and classes will be placed inside this
|
|
@@ -18,6 +17,28 @@ end
|
|
|
18
17
|
# @since 0.1
|
|
19
18
|
#
|
|
20
19
|
module Zen
|
|
20
|
+
##
|
|
21
|
+
# Array containing all the translations that should be made available to the
|
|
22
|
+
# Javascript code.
|
|
23
|
+
#
|
|
24
|
+
# @since 19-02-2012
|
|
25
|
+
#
|
|
26
|
+
JAVASCRIPT_TRANSLATIONS = [
|
|
27
|
+
'zen_general.buttons.bold',
|
|
28
|
+
'zen_general.buttons.italic',
|
|
29
|
+
'zen_general.buttons.link',
|
|
30
|
+
'zen_general.buttons.ul',
|
|
31
|
+
'zen_general.buttons.ol',
|
|
32
|
+
'zen_general.buttons.preview',
|
|
33
|
+
'zen_general.buttons.close',
|
|
34
|
+
'zen_general.datepicker.select_a_time',
|
|
35
|
+
'zen_general.datepicker.use_mouse_wheel',
|
|
36
|
+
'zen_general.datepicker.time_confirm_button',
|
|
37
|
+
'zen_general.datepicker.apply_range',
|
|
38
|
+
'zen_general.datepicker.cancel',
|
|
39
|
+
'zen_general.datepicker.week'
|
|
40
|
+
]
|
|
41
|
+
|
|
21
42
|
class << self
|
|
22
43
|
# The database connection to use for Sequel.
|
|
23
44
|
attr_accessor :database
|
|
@@ -29,29 +50,40 @@ module Zen
|
|
|
29
50
|
attr_reader :root
|
|
30
51
|
|
|
31
52
|
##
|
|
32
|
-
# Sets the root directory and adds the path to Ramaze.options.roots.
|
|
53
|
+
# Sets the root directory and adds the path to Ramaze.options.roots. Once
|
|
54
|
+
# set this method sets up the global assets and loads all asset groups that
|
|
55
|
+
# ship with Zen.
|
|
33
56
|
#
|
|
34
57
|
# @since 0.3
|
|
35
58
|
#
|
|
36
59
|
def root=(path)
|
|
60
|
+
raise('You can only set Zen.root once') unless root.nil?
|
|
61
|
+
|
|
37
62
|
@root = path
|
|
38
63
|
|
|
39
64
|
if !Ramaze.options.roots.include?(@root)
|
|
40
65
|
Ramaze.options.roots.push(@root)
|
|
41
66
|
end
|
|
67
|
+
|
|
68
|
+
setup_assets
|
|
69
|
+
load_global_assets
|
|
42
70
|
end
|
|
43
71
|
|
|
44
72
|
##
|
|
45
73
|
# Prepares Zen for the party of it's life.
|
|
46
74
|
#
|
|
47
|
-
# @since
|
|
75
|
+
# @since 0.3
|
|
76
|
+
# @event pre_start Event that is fired before starting Zen.
|
|
77
|
+
# @event post_start Event that is fired after all packages have been loaded,
|
|
78
|
+
# the cache has been set up, etc. This event is called at the very end of
|
|
79
|
+
# the method.
|
|
48
80
|
#
|
|
49
81
|
def start
|
|
50
|
-
if root.nil?
|
|
51
|
-
|
|
52
|
-
|
|
82
|
+
raise('No valid root directory specified in Zen.root') if root.nil?
|
|
83
|
+
|
|
84
|
+
Zen::Event.call(:pre_start)
|
|
53
85
|
|
|
54
|
-
# Set up Ramaze::Cache manually. This makes it possible for the
|
|
86
|
+
# Set up Ramaze::Cache manually. This makes it possible for the language
|
|
55
87
|
# files to cache their data in the custom cache without having to wait for
|
|
56
88
|
# Ramaze to set it up.
|
|
57
89
|
Ramaze::Cache.setup
|
|
@@ -59,27 +91,12 @@ module Zen
|
|
|
59
91
|
|
|
60
92
|
require 'zen/model/init'
|
|
61
93
|
require 'zen/model/methods'
|
|
62
|
-
|
|
63
|
-
setup_assets
|
|
64
|
-
|
|
65
94
|
require 'zen/package/all'
|
|
66
95
|
|
|
67
|
-
# Load the global stylesheet and Javascript file if they're located in
|
|
68
|
-
# ROOT/public/css/admin/global.css and ROOT/public/js/admin/global.js
|
|
69
|
-
load_global_assets
|
|
70
|
-
|
|
71
|
-
# Migrate all settings
|
|
72
|
-
begin
|
|
73
|
-
Settings::Setting.migrate
|
|
74
|
-
rescue => e
|
|
75
|
-
Ramaze::Log.warn(
|
|
76
|
-
'Failed to migrate the settings, make sure the database ' \
|
|
77
|
-
'table is up to date and that you executed rake db:migrate.'
|
|
78
|
-
)
|
|
79
|
-
end
|
|
80
|
-
|
|
81
96
|
Zen.asset.build(:javascript)
|
|
82
97
|
Zen.asset.build(:css)
|
|
98
|
+
|
|
99
|
+
Zen::Event.call(:post_start)
|
|
83
100
|
end
|
|
84
101
|
|
|
85
102
|
private
|
|
@@ -104,14 +121,13 @@ module Zen
|
|
|
104
121
|
Zen.asset.serve(
|
|
105
122
|
:css,
|
|
106
123
|
[
|
|
107
|
-
'admin/css/
|
|
108
|
-
'admin/css/
|
|
109
|
-
'admin/css/
|
|
110
|
-
'admin/css/
|
|
111
|
-
'admin/css/
|
|
112
|
-
'admin/css/
|
|
113
|
-
'admin/css/
|
|
114
|
-
'admin/css/zen/messages'
|
|
124
|
+
'admin/zen/css/reset',
|
|
125
|
+
'admin/zen/css/layout',
|
|
126
|
+
'admin/zen/css/general',
|
|
127
|
+
'admin/zen/css/forms',
|
|
128
|
+
'admin/zen/css/tables',
|
|
129
|
+
'admin/zen/css/buttons',
|
|
130
|
+
'admin/zen/css/messages'
|
|
115
131
|
],
|
|
116
132
|
:name => 'zen_core'
|
|
117
133
|
)
|
|
@@ -119,10 +135,12 @@ module Zen
|
|
|
119
135
|
Zen.asset.serve(
|
|
120
136
|
:javascript,
|
|
121
137
|
[
|
|
122
|
-
'admin/js/
|
|
123
|
-
'admin/js/
|
|
124
|
-
'admin/js/
|
|
125
|
-
'admin/js/
|
|
138
|
+
'admin/mootools/js/core',
|
|
139
|
+
'admin/mootools/js/more',
|
|
140
|
+
'admin/zen/js/lib/base',
|
|
141
|
+
'admin/zen/js/lib/html_table',
|
|
142
|
+
'admin/zen/js/lib/autosave',
|
|
143
|
+
'admin/zen/js/index'
|
|
126
144
|
],
|
|
127
145
|
:name => 'zen_core'
|
|
128
146
|
)
|
|
@@ -142,16 +160,16 @@ module Zen
|
|
|
142
160
|
|
|
143
161
|
publics.each do |p|
|
|
144
162
|
p = File.join(Zen.root, p)
|
|
145
|
-
css = File.join(p, 'admin
|
|
146
|
-
js = File.join(p, 'admin
|
|
163
|
+
css = File.join(p, 'admin/zen/css/global.css')
|
|
164
|
+
js = File.join(p, 'admin/zen/js/global.js')
|
|
147
165
|
|
|
148
166
|
if File.exist?(css) and css_loaded == false
|
|
149
|
-
Zen.asset.serve(:css, ['admin/css/global'])
|
|
167
|
+
Zen.asset.serve(:css, ['admin/zen/css/global'])
|
|
150
168
|
css_loaded = true
|
|
151
169
|
end
|
|
152
170
|
|
|
153
171
|
if File.exist?(js) and js_loaded == false
|
|
154
|
-
Zen.asset.serve(:javascript, ['admin/js/global'])
|
|
172
|
+
Zen.asset.serve(:javascript, ['admin/zen/js/global'])
|
|
155
173
|
js_loaded = true
|
|
156
174
|
end
|
|
157
175
|
end
|
|
@@ -172,6 +190,7 @@ require 'zen/validation'
|
|
|
172
190
|
require 'zen/language'
|
|
173
191
|
require 'zen/event'
|
|
174
192
|
require 'zen/model/helper'
|
|
193
|
+
require 'zen/model/plugin/events'
|
|
175
194
|
require 'zen/languages'
|
|
176
195
|
|
|
177
196
|
Ramaze::HelpersHelper.options.paths.push(__DIR__('zen'))
|
|
@@ -183,6 +202,8 @@ include Zen::Language::SingletonMethods
|
|
|
183
202
|
require 'zen/markup'
|
|
184
203
|
require 'zen/package'
|
|
185
204
|
require 'zen/theme'
|
|
205
|
+
require 'zen/security'
|
|
206
|
+
require 'zen/migrator'
|
|
186
207
|
|
|
187
208
|
# Load all the base controllers
|
|
188
209
|
require 'zen/controller/base_controller'
|
|
@@ -190,4 +211,3 @@ require 'zen/controller/frontend_controller'
|
|
|
190
211
|
require 'zen/controller/admin_controller'
|
|
191
212
|
require 'zen/controller/main_controller'
|
|
192
213
|
require 'zen/controller/preview'
|
|
193
|
-
require 'zen/controller/translations'
|
data/lib/zen/asset_groups.rb
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
Zen.asset.register_asset_group(:tabs) do |asset, controller, methods|
|
|
2
2
|
asset.serve(
|
|
3
3
|
:javascript,
|
|
4
|
-
['admin/js/zen/lib/
|
|
4
|
+
['admin/zen/js/lib/tabs', 'admin/zen/js/lib/hash'],
|
|
5
5
|
:name => 'zen_tabs',
|
|
6
6
|
:controller => controller,
|
|
7
7
|
:minify => true,
|
|
@@ -10,7 +10,7 @@ Zen.asset.register_asset_group(:tabs) do |asset, controller, methods|
|
|
|
10
10
|
|
|
11
11
|
asset.serve(
|
|
12
12
|
:css,
|
|
13
|
-
['admin/css/
|
|
13
|
+
['admin/zen/css/tabs'],
|
|
14
14
|
:name => 'zen_tabs',
|
|
15
15
|
:controller => controller,
|
|
16
16
|
:minify => true,
|
|
@@ -21,7 +21,7 @@ end
|
|
|
21
21
|
Zen.asset.register_asset_group(:datepicker) do |asset, controller, methods|
|
|
22
22
|
asset.serve(
|
|
23
23
|
:javascript,
|
|
24
|
-
['admin/js/
|
|
24
|
+
['admin/zen/js/lib/datepicker'],
|
|
25
25
|
:name => 'vendor_datepicker',
|
|
26
26
|
:controller => controller,
|
|
27
27
|
:minify => true,
|
|
@@ -30,7 +30,7 @@ Zen.asset.register_asset_group(:datepicker) do |asset, controller, methods|
|
|
|
30
30
|
|
|
31
31
|
asset.serve(
|
|
32
32
|
:css,
|
|
33
|
-
['admin/css/
|
|
33
|
+
['admin/zen/css/datepicker'],
|
|
34
34
|
:name => 'vendor_datepicker',
|
|
35
35
|
:controller => controller,
|
|
36
36
|
:minify => true,
|
|
@@ -41,7 +41,7 @@ end
|
|
|
41
41
|
Zen.asset.register_asset_group(:window) do |asset, controller, methods|
|
|
42
42
|
asset.serve(
|
|
43
43
|
:javascript,
|
|
44
|
-
['admin/js/
|
|
44
|
+
['admin/zen/js/lib/window'],
|
|
45
45
|
:name => 'zen_window',
|
|
46
46
|
:controller => controller,
|
|
47
47
|
:minify => true,
|
|
@@ -50,7 +50,7 @@ Zen.asset.register_asset_group(:window) do |asset, controller, methods|
|
|
|
50
50
|
|
|
51
51
|
asset.serve(
|
|
52
52
|
:css,
|
|
53
|
-
['admin/css/
|
|
53
|
+
['admin/zen/css/window'],
|
|
54
54
|
:name => 'zen_window',
|
|
55
55
|
:controller => controller,
|
|
56
56
|
:minify => true,
|
|
@@ -64,9 +64,9 @@ Zen.asset.register_asset_group(:editor) do |asset, controller, methods|
|
|
|
64
64
|
asset.serve(
|
|
65
65
|
:javascript,
|
|
66
66
|
[
|
|
67
|
-
'admin/js/
|
|
68
|
-
'admin/js/
|
|
69
|
-
'admin/js/
|
|
67
|
+
'admin/zen/js/lib/editor',
|
|
68
|
+
'admin/zen/js/lib/editor/markdown',
|
|
69
|
+
'admin/zen/js/lib/editor/textile'
|
|
70
70
|
],
|
|
71
71
|
:name => 'zen_editor',
|
|
72
72
|
:controller => controller,
|
|
@@ -76,7 +76,7 @@ Zen.asset.register_asset_group(:editor) do |asset, controller, methods|
|
|
|
76
76
|
|
|
77
77
|
asset.serve(
|
|
78
78
|
:css,
|
|
79
|
-
['admin/css/
|
|
79
|
+
['admin/zen/css/editor'],
|
|
80
80
|
:name => 'zen_editor',
|
|
81
81
|
:controller => controller,
|
|
82
82
|
:minify => true,
|
data/lib/zen/bin/create.rb
CHANGED
|
@@ -218,9 +218,16 @@ module Zen
|
|
|
218
218
|
)
|
|
219
219
|
end
|
|
220
220
|
|
|
221
|
+
puts
|
|
221
222
|
puts wrap_string(
|
|
222
|
-
"Your project has been created
|
|
223
|
+
"Your project has been created. Don't forget to migrate your " \
|
|
224
|
+
"database before starting Zen, this can be done using the " \
|
|
225
|
+
"following command:"
|
|
223
226
|
)
|
|
227
|
+
|
|
228
|
+
puts
|
|
229
|
+
puts ' $ rake db:migrate'
|
|
230
|
+
puts
|
|
224
231
|
end
|
|
225
232
|
|
|
226
233
|
##
|
|
@@ -21,8 +21,6 @@ module Ramaze
|
|
|
21
21
|
# @since 0.1
|
|
22
22
|
#
|
|
23
23
|
module Breadcrumb
|
|
24
|
-
@breadcrumbs = []
|
|
25
|
-
|
|
26
24
|
##
|
|
27
25
|
# Appends each element to the list of breadcrumb segments.
|
|
28
26
|
#
|
|
@@ -53,21 +51,15 @@ module Ramaze
|
|
|
53
51
|
# segment.
|
|
54
52
|
# @return [String]
|
|
55
53
|
#
|
|
56
|
-
def get_breadcrumbs(separator =
|
|
54
|
+
def get_breadcrumbs(separator = '/')
|
|
57
55
|
if !@breadcrumbs or @breadcrumbs.empty?
|
|
58
56
|
return
|
|
59
57
|
end
|
|
60
58
|
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
@breadcrumbs.each do |segment|
|
|
65
|
-
html += segment + separator
|
|
66
|
-
end
|
|
67
|
-
|
|
68
|
-
@breadcrumbs = nil
|
|
59
|
+
items = @breadcrumbs.dup
|
|
60
|
+
items[-1] = '<span class="current">%s</span>' % items[-1]
|
|
69
61
|
|
|
70
|
-
return
|
|
62
|
+
return items.join(' %s ' % separator)
|
|
71
63
|
end
|
|
72
64
|
end # Breadcrumb
|
|
73
65
|
end # Helper
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
module Ramaze
|
|
2
2
|
module Helper
|
|
3
3
|
##
|
|
4
|
-
#
|
|
5
|
-
# controller.
|
|
4
|
+
# General helper for methods that don't really belong into separate helpers.
|
|
6
5
|
#
|
|
7
6
|
# @since 0.3
|
|
8
7
|
#
|
|
@@ -18,6 +17,152 @@ module Ramaze
|
|
|
18
17
|
into.extend(Ramaze::Helper::Controller::ClassMethods)
|
|
19
18
|
end
|
|
20
19
|
|
|
20
|
+
##
|
|
21
|
+
# Returns an anchor tag that points towards the URL that allows users to
|
|
22
|
+
# manage collections of data.
|
|
23
|
+
#
|
|
24
|
+
# @since 17-12-2011
|
|
25
|
+
# @see Ramaze::Helper::Controller#edit_link
|
|
26
|
+
# @return [String]
|
|
27
|
+
#
|
|
28
|
+
def manage_link(url, text)
|
|
29
|
+
return '<a href="%s" class="icon pages">%s</a>' % [url, text]
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
##
|
|
33
|
+
# Returns an anchor tag that should point to a form that allows users to
|
|
34
|
+
# edit certain resources.
|
|
35
|
+
#
|
|
36
|
+
# @since 17-12-2011
|
|
37
|
+
# @param [#to_s] url The URL for the link.
|
|
38
|
+
# @param [#to_s] text The text to display in the link tag.
|
|
39
|
+
# @return [String]
|
|
40
|
+
#
|
|
41
|
+
def edit_link(url, text)
|
|
42
|
+
return '<a href="%s" class="icon edit">%s</a>' % [url, text]
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
##
|
|
46
|
+
# Returns a button that should point to a form that allows users to create
|
|
47
|
+
# new resources.
|
|
48
|
+
#
|
|
49
|
+
# @since 17-12-2011
|
|
50
|
+
# @see Ramaze::Helper::Controller#edit_link
|
|
51
|
+
#
|
|
52
|
+
def new_button(url, text)
|
|
53
|
+
return '<a href="%s" class="button">%s</a>' % [url, text]
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
##
|
|
57
|
+
# Returns a button that when clicked should delete a set of resources.
|
|
58
|
+
#
|
|
59
|
+
# @since 17-12-2011
|
|
60
|
+
# @param [String] text The text to display on the button.
|
|
61
|
+
# @return [String]
|
|
62
|
+
#
|
|
63
|
+
def delete_button(text)
|
|
64
|
+
return '<input type="submit" value="%s" class="button danger" />' \
|
|
65
|
+
% text
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
##
|
|
69
|
+
# Checks if a given object can be paginated and the page count is greater
|
|
70
|
+
# than 1. If this is the case then the pagination links are displayed.
|
|
71
|
+
#
|
|
72
|
+
# @since 17-12-2011
|
|
73
|
+
# @param [Mixed] object
|
|
74
|
+
# @return [String]
|
|
75
|
+
#
|
|
76
|
+
def render_pagination(object)
|
|
77
|
+
if object.respond_to?(:navigation) and object.page_count > 1
|
|
78
|
+
return object.navigation
|
|
79
|
+
end
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
##
|
|
83
|
+
# Returns a string containing the name of the browser. The following
|
|
84
|
+
# values can be returned:
|
|
85
|
+
#
|
|
86
|
+
# * firefox
|
|
87
|
+
# * internet_explorer
|
|
88
|
+
# * chrome
|
|
89
|
+
# * safari
|
|
90
|
+
# * other
|
|
91
|
+
#
|
|
92
|
+
# Note that this method does a very simple check and thus should not be
|
|
93
|
+
# relied on for anything mission critical.
|
|
94
|
+
#
|
|
95
|
+
# @since 23-12-2011
|
|
96
|
+
# @param [String] agent String containing the user agent to check, set to
|
|
97
|
+
# ``request.env['HTTP_USER_AGENT']`` if no custom agent is specified.
|
|
98
|
+
# @return [String]
|
|
99
|
+
#
|
|
100
|
+
def browser_name(agent = nil)
|
|
101
|
+
agent ||= request.env['HTTP_USER_AGENT']
|
|
102
|
+
|
|
103
|
+
if agent.nil? or agent.empty?
|
|
104
|
+
return 'other'
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
case agent.downcase
|
|
108
|
+
when /chrome/
|
|
109
|
+
return 'chrome'
|
|
110
|
+
|
|
111
|
+
when /safari/
|
|
112
|
+
return 'safari'
|
|
113
|
+
|
|
114
|
+
when /msie/
|
|
115
|
+
return 'internet_explorer'
|
|
116
|
+
|
|
117
|
+
when /firefox/
|
|
118
|
+
return 'firefox'
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
return 'other'
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
##
|
|
125
|
+
# Writes a JSON response.
|
|
126
|
+
#
|
|
127
|
+
# @since 13-02-2012
|
|
128
|
+
# @param [Mixed] data The response data.
|
|
129
|
+
# @param [Fixnum] status The HTTP status code.
|
|
130
|
+
#
|
|
131
|
+
def respond_json(data, status = 200)
|
|
132
|
+
respond(JSON.dump(data), status, 'Content-Type' => 'application/json')
|
|
133
|
+
end
|
|
134
|
+
|
|
135
|
+
##
|
|
136
|
+
# Returns a hash containing all the given POST fields, similar to
|
|
137
|
+
# ``Innate::Request#subset``.
|
|
138
|
+
#
|
|
139
|
+
# @since 19-02-2012
|
|
140
|
+
# @param [Array] *keys The POST keys to retrieve.
|
|
141
|
+
# @return [Hash]
|
|
142
|
+
#
|
|
143
|
+
def post_fields(*keys)
|
|
144
|
+
keys = keys.map { |k| k.to_s }
|
|
145
|
+
|
|
146
|
+
request.POST.reject { |k, v| not keys.include?(k) }
|
|
147
|
+
end
|
|
148
|
+
|
|
149
|
+
##
|
|
150
|
+
# Returns a JSON string containing all the translations for the Javascript
|
|
151
|
+
# code.
|
|
152
|
+
#
|
|
153
|
+
# @since 19-02-2012
|
|
154
|
+
# @return [String]
|
|
155
|
+
#
|
|
156
|
+
def javascript_translations
|
|
157
|
+
hash = {}
|
|
158
|
+
|
|
159
|
+
Zen::JAVASCRIPT_TRANSLATIONS.each do |key|
|
|
160
|
+
hash[key] = lang(key)
|
|
161
|
+
end
|
|
162
|
+
|
|
163
|
+
return JSON.dump(hash)
|
|
164
|
+
end
|
|
165
|
+
|
|
21
166
|
##
|
|
22
167
|
# Methods that become available as class methods.
|
|
23
168
|
#
|
|
@@ -58,12 +203,70 @@ module Ramaze
|
|
|
58
203
|
# CSRF attacks.
|
|
59
204
|
#
|
|
60
205
|
def csrf_protection(*actions)
|
|
61
|
-
# before_all() calls don't stack. Because CSRF protected methods are
|
|
62
|
-
# usually used for POST calls (and are separate methods) this works
|
|
63
|
-
# around it.
|
|
64
206
|
stacked_before_all(:validate_csrf_token) do
|
|
65
207
|
csrf_protection(*actions) do
|
|
66
|
-
|
|
208
|
+
message(:error, lang('zen_general.errors.csrf'))
|
|
209
|
+
|
|
210
|
+
unless request.POST.empty?
|
|
211
|
+
request.POST.delete('id')
|
|
212
|
+
request.POST.delete('csrf_token')
|
|
213
|
+
|
|
214
|
+
flash[:form_data] = request.POST
|
|
215
|
+
end
|
|
216
|
+
|
|
217
|
+
redirect_referrer(::Dashboard::Controller::Dashboard.r(:index))
|
|
218
|
+
end
|
|
219
|
+
end
|
|
220
|
+
end
|
|
221
|
+
|
|
222
|
+
##
|
|
223
|
+
# Creates a method that can be used for automatically saving an existing
|
|
224
|
+
# object. This method requires you to supply the following:
|
|
225
|
+
#
|
|
226
|
+
# * A model that extends ``Sequel::Model``
|
|
227
|
+
# * An array of columns that can be specified
|
|
228
|
+
#
|
|
229
|
+
# @example
|
|
230
|
+
# autosave Model::CategoryGroup,
|
|
231
|
+
# [:name, :description],
|
|
232
|
+
# :edit_category_group
|
|
233
|
+
#
|
|
234
|
+
# @since 13-02-2012
|
|
235
|
+
# @param [Class] model The model to use for saving data.
|
|
236
|
+
# @param [Array] columns The columns that can be saved.
|
|
237
|
+
# @param [#to_sym] permission The permission required for saving
|
|
238
|
+
# objects.
|
|
239
|
+
#
|
|
240
|
+
def autosave(model, columns, permission)
|
|
241
|
+
self.instance_eval do
|
|
242
|
+
define_method :autosave do
|
|
243
|
+
csrf_protection(:autosave) do
|
|
244
|
+
respond(lang('zen_general.errors.csrf'), 403)
|
|
245
|
+
end
|
|
246
|
+
|
|
247
|
+
post = post_fields(*columns)
|
|
248
|
+
object = model[request.params['id']]
|
|
249
|
+
|
|
250
|
+
if object.nil? or !user_authorized?(permission)
|
|
251
|
+
respond_json(
|
|
252
|
+
{:error => lang('zen_general.errors.invalid_request')},
|
|
253
|
+
404
|
|
254
|
+
)
|
|
255
|
+
else
|
|
256
|
+
begin
|
|
257
|
+
post.each do |k, v|
|
|
258
|
+
object.send("#{k}=", v) if object.respond_to?("#{k}=")
|
|
259
|
+
end
|
|
260
|
+
|
|
261
|
+
object.save
|
|
262
|
+
|
|
263
|
+
respond_json({:csrf_token => get_csrf_token}, 200)
|
|
264
|
+
rescue => e
|
|
265
|
+
Ramaze::Log.error(e)
|
|
266
|
+
|
|
267
|
+
respond_json({:errors => object.errors}, 400)
|
|
268
|
+
end
|
|
269
|
+
end
|
|
67
270
|
end
|
|
68
271
|
end
|
|
69
272
|
end
|