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
|
@@ -1,3 +1,7 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
namespace('Zen');
|
|
4
|
+
|
|
1
5
|
/**
|
|
2
6
|
* The Window class can be used to create basic windows with a title and a set
|
|
3
7
|
* of buttons. These windows can be used for a preview of an article, showing an
|
|
@@ -78,17 +82,33 @@ Zen.Window = new Class(
|
|
|
78
82
|
move: false,
|
|
79
83
|
|
|
80
84
|
// A collection of buttons to display inside the window
|
|
81
|
-
buttons:
|
|
85
|
+
buttons:
|
|
86
|
+
[
|
|
87
|
+
{
|
|
88
|
+
name: 'close',
|
|
89
|
+
label: lang('zen_general.buttons.close'),
|
|
90
|
+
onClick: function(instance)
|
|
91
|
+
{
|
|
92
|
+
instance.destroy();
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
]
|
|
82
96
|
},
|
|
83
97
|
|
|
84
98
|
/**
|
|
85
99
|
* DOM element for the current window instance.
|
|
86
100
|
*
|
|
87
101
|
* @since 0.2.6
|
|
88
|
-
* @var {element}
|
|
89
102
|
*/
|
|
90
103
|
element: null,
|
|
91
104
|
|
|
105
|
+
/**
|
|
106
|
+
* The background overlay for the current window.
|
|
107
|
+
*
|
|
108
|
+
* @since 18-12-2011
|
|
109
|
+
*/
|
|
110
|
+
overlay: null,
|
|
111
|
+
|
|
92
112
|
/**
|
|
93
113
|
* Creates a new instance of the class and displays the window.
|
|
94
114
|
*
|
|
@@ -106,60 +126,53 @@ Zen.Window = new Class(
|
|
|
106
126
|
|
|
107
127
|
this.setOptions(options);
|
|
108
128
|
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
'
|
|
129
|
+
var container = new Element('div',
|
|
130
|
+
{
|
|
131
|
+
'class': 'window',
|
|
132
|
+
styles:
|
|
112
133
|
{
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
{
|
|
116
|
-
width: this.options.width,
|
|
117
|
-
height: this.options.height
|
|
118
|
-
}
|
|
134
|
+
width: this.options.width,
|
|
135
|
+
height: this.options.height
|
|
119
136
|
}
|
|
120
|
-
);
|
|
137
|
+
});
|
|
121
138
|
|
|
122
|
-
var
|
|
123
|
-
var close = new Element('div' , {'class': 'close'});
|
|
124
|
-
var body = new Element('div' , {'class': 'body', html: content});
|
|
139
|
+
var body = new Element('div', {'class': 'body', html: content});
|
|
125
140
|
var current = this;
|
|
126
141
|
|
|
127
142
|
// Do we have a title?
|
|
128
143
|
if ( this.options.title !== null )
|
|
129
144
|
{
|
|
130
|
-
var
|
|
145
|
+
var header = new Element('div', {'class': 'header'});
|
|
146
|
+
var title = new Element('h2', {html: this.options.title});
|
|
147
|
+
|
|
131
148
|
title.inject(header);
|
|
149
|
+
header.inject(container);
|
|
132
150
|
}
|
|
133
151
|
|
|
134
|
-
close.addEvent('click', function()
|
|
135
|
-
{
|
|
136
|
-
current.destroy();
|
|
137
|
-
});
|
|
138
|
-
|
|
139
|
-
// Inject the base elements
|
|
140
|
-
close.inject(header);
|
|
141
|
-
header.inject(container);
|
|
142
152
|
body.inject(container);
|
|
143
153
|
|
|
144
154
|
// Add all the buttons
|
|
145
155
|
if ( this.options.buttons.length > 0 )
|
|
146
156
|
{
|
|
147
157
|
var buttons_container = new Element(
|
|
148
|
-
'div',
|
|
158
|
+
'div',
|
|
159
|
+
{'class': 'buttons'}
|
|
149
160
|
);
|
|
150
161
|
|
|
151
162
|
this.options.buttons.each(function(button)
|
|
152
163
|
{
|
|
153
|
-
var
|
|
154
|
-
|
|
164
|
+
var btn = new Element('button',
|
|
165
|
+
{
|
|
166
|
+
text: button.label,
|
|
167
|
+
'class': 'button ' + button.name
|
|
168
|
+
});
|
|
155
169
|
|
|
156
170
|
btn.addEvent('click', function()
|
|
157
171
|
{
|
|
158
172
|
button.onClick(current);
|
|
159
173
|
});
|
|
160
174
|
|
|
161
|
-
btn.inject(
|
|
162
|
-
div.inject(buttons_container);
|
|
175
|
+
btn.inject(buttons_container);
|
|
163
176
|
});
|
|
164
177
|
|
|
165
178
|
buttons_container.inject(container);
|
|
@@ -183,9 +196,16 @@ Zen.Window = new Class(
|
|
|
183
196
|
var margin = this.options.width - ( this.options.width * 1.5 );
|
|
184
197
|
container.setStyle('margin-left', margin);
|
|
185
198
|
|
|
199
|
+
if ( $$('.window_overlay').length <= 0 )
|
|
200
|
+
{
|
|
201
|
+
this.overlay = new Element('div', {'class': 'window_overlay'});
|
|
202
|
+
this.overlay.inject(document.body);
|
|
203
|
+
}
|
|
204
|
+
|
|
186
205
|
// Last step: inject the HTML into the DOM
|
|
187
206
|
this.element = container;
|
|
188
207
|
this.element.inject(document.body);
|
|
208
|
+
|
|
189
209
|
},
|
|
190
210
|
|
|
191
211
|
/**
|
|
@@ -196,5 +216,10 @@ Zen.Window = new Class(
|
|
|
196
216
|
destroy: function()
|
|
197
217
|
{
|
|
198
218
|
this.element.destroy();
|
|
219
|
+
|
|
220
|
+
if ( this.overlay )
|
|
221
|
+
{
|
|
222
|
+
this.overlay.destroy();
|
|
223
|
+
}
|
|
199
224
|
}
|
|
200
225
|
});
|
data/lib/zen/security.rb
ADDED
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
module Zen
|
|
2
|
+
##
|
|
3
|
+
# Module for dealing with various security related actions such as sanitizing
|
|
4
|
+
# user input/output.
|
|
5
|
+
#
|
|
6
|
+
# @since 07-01-2012
|
|
7
|
+
#
|
|
8
|
+
module Security
|
|
9
|
+
class << self
|
|
10
|
+
##
|
|
11
|
+
# Sanitizes the string by escaping all Etanni template tags in it so that
|
|
12
|
+
# they aren't executed. Optionally this method can also remove all
|
|
13
|
+
# dangerous HTML using Loofah.
|
|
14
|
+
#
|
|
15
|
+
# It is recommended to use this method whenever your code accepts used
|
|
16
|
+
# input. Since removing HTML isn't always needed (sometimes you actually
|
|
17
|
+
# want to allow certain HTML tags) this is turned off by default.
|
|
18
|
+
#
|
|
19
|
+
# @example
|
|
20
|
+
# input = 'Hello #{puts 10}'
|
|
21
|
+
#
|
|
22
|
+
# Zen::Input.sanitize(input) # => "Hello \#\{puts 10\}"
|
|
23
|
+
#
|
|
24
|
+
# @since 03-01-2012
|
|
25
|
+
# @param [String] input The input string to sanitize.
|
|
26
|
+
# @param [TrueClass|FalseClass] clean_html When set to true certain HTML
|
|
27
|
+
# elements will be removed using Loofah.
|
|
28
|
+
# @return [String] The sanitized string.
|
|
29
|
+
#
|
|
30
|
+
def sanitize(input, clean_html = false)
|
|
31
|
+
return input unless input.is_a?(String)
|
|
32
|
+
|
|
33
|
+
# Cheap way of escaping the template tags.
|
|
34
|
+
input = input.gsub('<?r', '\<\?r') \
|
|
35
|
+
.gsub('?>', '\?\>') \
|
|
36
|
+
.gsub('#{', '\#\{') \
|
|
37
|
+
.gsub('}', '\}')
|
|
38
|
+
|
|
39
|
+
if clean_html == true
|
|
40
|
+
input = Loofah.fragment(input) \
|
|
41
|
+
.scrub!(:whitewash) \
|
|
42
|
+
.scrub!(:nofollow) \
|
|
43
|
+
.to_s
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
return input
|
|
47
|
+
end
|
|
48
|
+
end # class << self
|
|
49
|
+
end # Input
|
|
50
|
+
end # Zen
|
data/lib/zen/spec/helper.rb
CHANGED
|
@@ -10,6 +10,9 @@ end
|
|
|
10
10
|
require 'capybara/dsl'
|
|
11
11
|
require 'ramaze/spec/bacon'
|
|
12
12
|
|
|
13
|
+
require __DIR__('helper/general')
|
|
14
|
+
require __DIR__('helper/capybara')
|
|
15
|
+
|
|
13
16
|
Bacon.extend(Bacon::TapOutput)
|
|
14
17
|
|
|
15
18
|
# Configure Capybara
|
|
@@ -18,130 +21,12 @@ Capybara.configure do |config|
|
|
|
18
21
|
config.app = Ramaze.middleware
|
|
19
22
|
end
|
|
20
23
|
|
|
21
|
-
##
|
|
22
|
-
# Logs the user in using the spec user.
|
|
23
|
-
#
|
|
24
|
-
# @since 0.2.8
|
|
25
|
-
#
|
|
26
|
-
def capybara_login
|
|
27
|
-
# Log the user in
|
|
28
|
-
login_url = ::Users::Controller::Users.r(:login).to_s
|
|
29
|
-
dashboard_url = ::Sections::Controller::Sections.r(:index).to_s
|
|
30
|
-
|
|
31
|
-
visit(login_url)
|
|
32
|
-
::Ramaze::Log.loggers.clear
|
|
33
|
-
|
|
34
|
-
within('#login_form') do
|
|
35
|
-
fill_in('Email' , :with => 'spec@domain.tld')
|
|
36
|
-
fill_in('Password', :with => 'spec')
|
|
37
|
-
click_button('Login')
|
|
38
|
-
end
|
|
39
|
-
end
|
|
40
|
-
|
|
41
|
-
##
|
|
42
|
-
# Runs the block in a new thread and redirects $stdout and $stderr. The output
|
|
43
|
-
# normally stored in these variables is stored in an instance of StringIO which
|
|
44
|
-
# is returned as a hash.
|
|
45
|
-
#
|
|
46
|
-
# @example
|
|
47
|
-
# out = catch_output do
|
|
48
|
-
# puts 'hello'
|
|
49
|
-
# end
|
|
50
|
-
#
|
|
51
|
-
# puts out # => {:stdout => "hello\n", :stderr => ""}
|
|
52
|
-
#
|
|
53
|
-
# @since 0.2.8
|
|
54
|
-
# @return [Hash]
|
|
55
|
-
#
|
|
56
|
-
def catch_output
|
|
57
|
-
data = {
|
|
58
|
-
:stdout => nil,
|
|
59
|
-
:stderr => nil
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
Thread.new do
|
|
63
|
-
$stdout, $stderr = StringIO.new, StringIO.new
|
|
64
|
-
|
|
65
|
-
yield
|
|
66
|
-
|
|
67
|
-
$stdout.rewind
|
|
68
|
-
$stderr.rewind
|
|
69
|
-
|
|
70
|
-
data[:stdout], data[:stderr] = $stdout.read, $stderr.read
|
|
71
|
-
|
|
72
|
-
$stdout, $stderr = STDOUT, STDERR
|
|
73
|
-
end.join
|
|
74
|
-
|
|
75
|
-
return data
|
|
76
|
-
end
|
|
77
|
-
|
|
78
|
-
##
|
|
79
|
-
# Allows developers to create stubbed objects similar to Mocha's stub() method.
|
|
80
|
-
#
|
|
81
|
-
# @example
|
|
82
|
-
# obj = stub(:language => 'Ruby')
|
|
83
|
-
# puts obj.language # => "Ruby"
|
|
84
|
-
#
|
|
85
|
-
# @since 0.2.8
|
|
86
|
-
# @param [Hash] attributes A hash containing all the attributes to set and
|
|
87
|
-
# their values.
|
|
88
|
-
# @return [Class]
|
|
89
|
-
#
|
|
90
|
-
def stub(attributes)
|
|
91
|
-
obj = Struct.new(*attributes.keys).new
|
|
92
|
-
|
|
93
|
-
attributes.each do |k, v|
|
|
94
|
-
obj.send("#{k}=", v)
|
|
95
|
-
end
|
|
96
|
-
|
|
97
|
-
return obj
|
|
98
|
-
end
|
|
99
|
-
|
|
100
|
-
##
|
|
101
|
-
# Returns a hash with a stubbed custom field and a stubbed custom field value.
|
|
102
|
-
#
|
|
103
|
-
# @since 0.2.8
|
|
104
|
-
# @param [String] field_type_name The name of the field type.
|
|
105
|
-
# @param [Hash] options Additional options to pass to the stub() call for the
|
|
106
|
-
# custom field.
|
|
107
|
-
# @return [Hash]
|
|
108
|
-
#
|
|
109
|
-
def stub_custom_field(field_type_name, options = {})
|
|
110
|
-
custom_field_type = CustomFields::Model::CustomFieldType[
|
|
111
|
-
:name => field_type_name
|
|
112
|
-
]
|
|
113
|
-
|
|
114
|
-
options = {
|
|
115
|
-
:id => 1,
|
|
116
|
-
:name => 'Field',
|
|
117
|
-
:slug => 'field',
|
|
118
|
-
:description => 'A stubbed field',
|
|
119
|
-
:sort_order => 0,
|
|
120
|
-
:format => 'markdown',
|
|
121
|
-
:required => false,
|
|
122
|
-
:text_editor => false,
|
|
123
|
-
:textarea_rows => nil,
|
|
124
|
-
:text_limit => 100,
|
|
125
|
-
:custom_field_group_id => 1,
|
|
126
|
-
:custom_field_type_id => custom_field_type.id,
|
|
127
|
-
:custom_field_type => custom_field_type
|
|
128
|
-
}.merge(options)
|
|
129
|
-
|
|
130
|
-
return {
|
|
131
|
-
:custom_field => stub(options),
|
|
132
|
-
:custom_field_value => stub(
|
|
133
|
-
:id => 1,
|
|
134
|
-
:value => 'Ruby',
|
|
135
|
-
:custom_field_id => 1,
|
|
136
|
-
:section_entry_id => 1
|
|
137
|
-
)
|
|
138
|
-
}
|
|
139
|
-
end
|
|
140
|
-
|
|
141
24
|
shared :capybara do
|
|
142
25
|
Ramaze.setup_dependencies
|
|
143
26
|
extend Capybara::DSL
|
|
144
27
|
extend WebMock::API
|
|
28
|
+
extend Zen::Spec::Helper::Capybara
|
|
29
|
+
extend Zen::Spec::Helper::General
|
|
145
30
|
|
|
146
31
|
capybara_login
|
|
147
32
|
end
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
module Zen
|
|
2
|
+
module Spec
|
|
3
|
+
module Helper
|
|
4
|
+
##
|
|
5
|
+
# Module providing various helper methods for Capybara based tests.
|
|
6
|
+
#
|
|
7
|
+
# @since 18-02-2012
|
|
8
|
+
#
|
|
9
|
+
module Capybara
|
|
10
|
+
##
|
|
11
|
+
# Logs the user in using the spec user.
|
|
12
|
+
#
|
|
13
|
+
# @since 0.2.8
|
|
14
|
+
#
|
|
15
|
+
def capybara_login
|
|
16
|
+
# Log the user in
|
|
17
|
+
login_url = ::Users::Controller::Users.r(:login).to_s
|
|
18
|
+
dashboard_url = ::Sections::Controller::Sections.r(:index).to_s
|
|
19
|
+
|
|
20
|
+
visit(login_url)
|
|
21
|
+
::Ramaze::Log.loggers.clear
|
|
22
|
+
|
|
23
|
+
within('#login_form') do
|
|
24
|
+
fill_in('Email' , :with => 'spec@domain.tld')
|
|
25
|
+
fill_in('Password', :with => 'spec')
|
|
26
|
+
click_button('Login')
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
##
|
|
31
|
+
# Automatically saves a form with the given ID.
|
|
32
|
+
#
|
|
33
|
+
# @since 18-02-2012
|
|
34
|
+
# @param [String] id The ID of the form.
|
|
35
|
+
#
|
|
36
|
+
def autosave_form(id)
|
|
37
|
+
page.evaluate_script(
|
|
38
|
+
"new Zen.Autosave(
|
|
39
|
+
$('#{id}'),
|
|
40
|
+
$('#{id}').get('data-autosave-url'),
|
|
41
|
+
{interval: 1000}
|
|
42
|
+
);"
|
|
43
|
+
)
|
|
44
|
+
|
|
45
|
+
sleep(2.5)
|
|
46
|
+
|
|
47
|
+
page.has_selector?('span.error').should == false
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
##
|
|
51
|
+
# Switches Capybara's driver to the default Javascript driver.
|
|
52
|
+
#
|
|
53
|
+
# @since 18-02-2012
|
|
54
|
+
#
|
|
55
|
+
def enable_javascript
|
|
56
|
+
WebMock.disable!
|
|
57
|
+
|
|
58
|
+
::Capybara.current_driver = ::Capybara.javascript_driver
|
|
59
|
+
|
|
60
|
+
capybara_login
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
##
|
|
64
|
+
# Switches Capybara's driver back to the default driver.
|
|
65
|
+
#
|
|
66
|
+
# @since 18-02-2012
|
|
67
|
+
#
|
|
68
|
+
def disable_javascript
|
|
69
|
+
::Capybara.use_default_driver
|
|
70
|
+
WebMock.enable!
|
|
71
|
+
end
|
|
72
|
+
end # Capybara
|
|
73
|
+
end # Helper
|
|
74
|
+
end # Spec
|
|
75
|
+
end # Zen
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
module Zen
|
|
2
|
+
module Spec
|
|
3
|
+
module Helper
|
|
4
|
+
##
|
|
5
|
+
# Module providing general spec helpers.
|
|
6
|
+
#
|
|
7
|
+
# @since 18-02-2012
|
|
8
|
+
#
|
|
9
|
+
module General
|
|
10
|
+
##
|
|
11
|
+
# Allows developers to create stubbed objects similar to Mocha's stub() method.
|
|
12
|
+
#
|
|
13
|
+
# @example
|
|
14
|
+
# obj = stub(:language => 'Ruby')
|
|
15
|
+
# puts obj.language # => "Ruby"
|
|
16
|
+
#
|
|
17
|
+
# @since 0.2.8
|
|
18
|
+
# @param [Hash] attributes A hash containing all the attributes to set and
|
|
19
|
+
# their values.
|
|
20
|
+
# @return [Class]
|
|
21
|
+
#
|
|
22
|
+
def stub(attributes)
|
|
23
|
+
obj = Struct.new(*attributes.keys).new
|
|
24
|
+
|
|
25
|
+
attributes.each do |k, v|
|
|
26
|
+
obj.send("#{k}=", v)
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
return obj
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
##
|
|
33
|
+
# Returns a hash with a stubbed custom field and a stubbed custom field value.
|
|
34
|
+
#
|
|
35
|
+
# @since 0.2.8
|
|
36
|
+
# @param [String] field_type_name The name of the field type.
|
|
37
|
+
# @param [Hash] options Additional options to pass to the stub() call for the
|
|
38
|
+
# custom field.
|
|
39
|
+
# @return [Hash]
|
|
40
|
+
#
|
|
41
|
+
def stub_custom_field(field_type_name, options = {})
|
|
42
|
+
custom_field_type = CustomFields::Model::CustomFieldType[
|
|
43
|
+
:name => field_type_name
|
|
44
|
+
]
|
|
45
|
+
|
|
46
|
+
options = {
|
|
47
|
+
:id => 1,
|
|
48
|
+
:name => 'Field',
|
|
49
|
+
:slug => 'field',
|
|
50
|
+
:description => 'A stubbed field',
|
|
51
|
+
:sort_order => 0,
|
|
52
|
+
:format => 'markdown',
|
|
53
|
+
:required => false,
|
|
54
|
+
:text_editor => false,
|
|
55
|
+
:textarea_rows => nil,
|
|
56
|
+
:text_limit => 100,
|
|
57
|
+
:custom_field_group_id => 1,
|
|
58
|
+
:custom_field_type_id => custom_field_type.id,
|
|
59
|
+
:custom_field_type => custom_field_type
|
|
60
|
+
}.merge(options)
|
|
61
|
+
|
|
62
|
+
return {
|
|
63
|
+
:custom_field => stub(options),
|
|
64
|
+
:custom_field_value => stub(
|
|
65
|
+
:id => 1,
|
|
66
|
+
:value => 'Ruby',
|
|
67
|
+
:custom_field_id => 1,
|
|
68
|
+
:section_entry_id => 1
|
|
69
|
+
)
|
|
70
|
+
}
|
|
71
|
+
end
|
|
72
|
+
end # General
|
|
73
|
+
end # Helper
|
|
74
|
+
end # Spec
|
|
75
|
+
end # Zen
|