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
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
# Zen.Editor
|
|
2
|
+
|
|
3
|
+
Zen.Editor is the main class used for the markup editor that can be used to more
|
|
4
|
+
easily insert markup for all supported languages into a text area. By default
|
|
5
|
+
Zen will automatically use the markup editor for all ``textarea`` elements with
|
|
6
|
+
a class of ``visual_editor``. The format used for the markup is retrieved from
|
|
7
|
+
the column ``data-format`` (this column is required). The attribute
|
|
8
|
+
``data-format`` should contain the name of the markup engine to use as defined
|
|
9
|
+
in ``Zen.Editor.drivers``. Currently the following are supported:
|
|
10
|
+
|
|
11
|
+
* markdown
|
|
12
|
+
* textile
|
|
13
|
+
|
|
14
|
+
If an unknown driver is specified the default driver (HTML) will be used
|
|
15
|
+
instead.
|
|
16
|
+
|
|
17
|
+
The markup required for Zen to automatically use the markup editor looks like
|
|
18
|
+
the example below.
|
|
19
|
+
|
|
20
|
+
<textarea class="visual_editor" data-format="markdown"></textarea>
|
|
21
|
+
|
|
22
|
+
If you want to manually create an instance of ``Zen.Editor`` you can still do so
|
|
23
|
+
but due to the way the system works you shouldn't directly create an instance of
|
|
24
|
+
the class as this will prevent the editor from automatically using the correct
|
|
25
|
+
driver class. You should use ``Zen.Editor.init`` instead. This method has the
|
|
26
|
+
following syntax:
|
|
27
|
+
|
|
28
|
+
var editor = Zen.Editor.init(driver, element[, options, buttons]);
|
|
29
|
+
|
|
30
|
+
The first parameter is a string containing the name of the driver to use. The
|
|
31
|
+
second parameter can either be a CSS selector, a collection of elements or a
|
|
32
|
+
single element. If the parameter is a CSS selector or a collection of elements
|
|
33
|
+
the **first** element will be used, all others will be ignored. The last two
|
|
34
|
+
parameters are used for customized options as well as adding custom buttons to
|
|
35
|
+
the editor. Currently the editor only supports the following two options:
|
|
36
|
+
|
|
37
|
+
* width: sets a minimum width on the textarea element.
|
|
38
|
+
* height: sets a minimum hight on the textarea element.
|
|
39
|
+
|
|
40
|
+
Buttons can be added by setting the last parameter to an array. Each button has
|
|
41
|
+
the same format as the buttons used in Zen.Window:
|
|
42
|
+
|
|
43
|
+
{
|
|
44
|
+
name: 'foobar',
|
|
45
|
+
label: 'Foobar',
|
|
46
|
+
onClick: function() {}
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
Note that unlike Zen.Window these buttons can't be set in the options object
|
|
50
|
+
under the key "buttons". This is because the Options class of Mootools doesn't
|
|
51
|
+
actually merge options but instead overwrites existing ones. This would mean
|
|
52
|
+
that it would be more difficult to add a default set of buttons as well as
|
|
53
|
+
custom ones. Most likely this will change in the future once I find out what the
|
|
54
|
+
best way of doing this would be.
|
|
55
|
+
|
|
56
|
+
Example:
|
|
57
|
+
|
|
58
|
+
var editor = Zen.Editor.init(
|
|
59
|
+
'markdown',
|
|
60
|
+
'div#text_editor',
|
|
61
|
+
{
|
|
62
|
+
width: 400
|
|
63
|
+
},
|
|
64
|
+
[
|
|
65
|
+
{
|
|
66
|
+
name: 'custom',
|
|
67
|
+
label: 'Custom',
|
|
68
|
+
onClick: function(editor)
|
|
69
|
+
{
|
|
70
|
+
console.log("This is a custom button!");
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
]
|
|
74
|
+
);
|
|
75
|
+
|
|
76
|
+
Functions used for buttons take a single parameter which will contain an
|
|
77
|
+
instance of the editor the button belongs to. This makes it easy to insert text
|
|
78
|
+
into the textarea:
|
|
79
|
+
|
|
80
|
+
function(editor)
|
|
81
|
+
{
|
|
82
|
+
editor.insertAroundCursor({before: '<!--', after: '-->'});
|
|
83
|
+
}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# Zen.Hash
|
|
2
|
+
|
|
3
|
+
Zen.Hash is a class that can be used to parse and generate shebang/hash bang
|
|
4
|
+
URLs. Parsing is done using ``Zen.Hash#parse`` and generating URLs using
|
|
5
|
+
``Zen.Hash#getHash``.
|
|
6
|
+
|
|
7
|
+
Parsing a URL is relatively simple and the end output is similar to how you'd
|
|
8
|
+
parse URLs with query string parameters. First create a new instance of this
|
|
9
|
+
class:
|
|
10
|
+
|
|
11
|
+
var hash = new Zen.Hash('#!/users/active?limit=10');
|
|
12
|
+
|
|
13
|
+
The supplied string will be parsed straight away and the result can be
|
|
14
|
+
retrieved from two attributes:
|
|
15
|
+
|
|
16
|
+
* segments
|
|
17
|
+
* params
|
|
18
|
+
|
|
19
|
+
The first attribute contains an array with all the URL segments, the second
|
|
20
|
+
one is an object containing all the query string parameters. In case of the
|
|
21
|
+
above example that would lead to the following data being stored in these
|
|
22
|
+
attributes:
|
|
23
|
+
|
|
24
|
+
console.log(hash.segments); // => ["users", "active"]
|
|
25
|
+
console.log(hash.params); // => {limit: '10'}
|
|
26
|
+
|
|
27
|
+
Keep in mind that calling ``Zen.Hash#parse`` will overwrite existing segments
|
|
28
|
+
and parameters.
|
|
29
|
+
|
|
30
|
+
Generating a full shebang URL is pretty straight forward as well and can be done
|
|
31
|
+
by calling ``getHash()``. This method returns a string containing the shebang
|
|
32
|
+
URL including the prefix:
|
|
33
|
+
|
|
34
|
+
hash.getHash(); // => "#!/users/active?limit=10"
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
# Zen.HtmlTable
|
|
2
|
+
|
|
3
|
+
The class Zen.HtmlTable was introduced in Zen 0.2.8 and makes it possible to
|
|
4
|
+
sort tables by their columns, check all checkboxes in the first column of a
|
|
5
|
+
table and it highlights odd rows. Generally you don't need to use this class
|
|
6
|
+
itself but instead you'll be using the markup it accepts in order to modify it's
|
|
7
|
+
behavior.
|
|
8
|
+
|
|
9
|
+
The basic markup for this class is very simple, in fact, it's nothing more than
|
|
10
|
+
a regular table with a ``<thead>`` element:
|
|
11
|
+
|
|
12
|
+
<table>
|
|
13
|
+
<thead>
|
|
14
|
+
<tr>
|
|
15
|
+
<th>#</th>
|
|
16
|
+
<th>Name</th>
|
|
17
|
+
</tr>
|
|
18
|
+
</thead>
|
|
19
|
+
<tbody>
|
|
20
|
+
<tr>
|
|
21
|
+
<td>2</td>
|
|
22
|
+
<td>Ruby</td>
|
|
23
|
+
</tr>
|
|
24
|
+
</tbody>
|
|
25
|
+
</table>
|
|
26
|
+
|
|
27
|
+
Zen will automatically detect and use the table and you're good to go. If you
|
|
28
|
+
want to modify the behavior you can use a few attributes on certain elements of
|
|
29
|
+
the table. The following attributes can be applied to the ``<table>`` element
|
|
30
|
+
itself:
|
|
31
|
+
|
|
32
|
+
* data-sort-index: the index of the ``<th>`` element to sort the table on by
|
|
33
|
+
default. By default this is set to 1 as all tables have a checkbox in the
|
|
34
|
+
first column of each row.
|
|
35
|
+
|
|
36
|
+
The following attributes can be set on each ``<th>`` element:
|
|
37
|
+
|
|
38
|
+
* data-sort-parser: the name of the parser to use for sorting the columns. This
|
|
39
|
+
option is directly passed to HtmlTable.Sort and can be any of the parsers
|
|
40
|
+
Mootools has to offer (or one you wrote yourself).
|
|
41
|
+
|
|
42
|
+
Example:
|
|
43
|
+
|
|
44
|
+
<table data-sort-index="1">
|
|
45
|
+
<thead>
|
|
46
|
+
<tr>
|
|
47
|
+
<th>#</th>
|
|
48
|
+
<th data-sort-parser="usernames">Name</th>
|
|
49
|
+
</tr>
|
|
50
|
+
</thead>
|
|
51
|
+
<tbody>
|
|
52
|
+
<tr>
|
|
53
|
+
<td>2</td>
|
|
54
|
+
<td>Ruby</td>
|
|
55
|
+
</tr>
|
|
56
|
+
</tbody>
|
|
57
|
+
</table>
|
|
58
|
+
|
|
59
|
+
If you want to create a table that should be ignored by Zen.HtmlTable simply
|
|
60
|
+
give the ``<table>`` element a class of ``no_sort``:
|
|
61
|
+
|
|
62
|
+
<table class="no_sort">
|
|
63
|
+
<thead>
|
|
64
|
+
<tr>
|
|
65
|
+
<th>#</th>
|
|
66
|
+
<th>Name</th>
|
|
67
|
+
</tr>
|
|
68
|
+
</thead>
|
|
69
|
+
<tbody>
|
|
70
|
+
<tr>
|
|
71
|
+
<td>2</td>
|
|
72
|
+
<td>Ruby</td>
|
|
73
|
+
</tr>
|
|
74
|
+
</tbody>
|
|
75
|
+
</table>
|
|
76
|
+
|
|
77
|
+
This class can also be applied to ``<th>`` elements to ignore just that column
|
|
78
|
+
rather than the entire table.
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
# Zen.Tabs
|
|
2
|
+
|
|
3
|
+
Zen.Tabs can be used to create a tab based navigation menu. Because Zen already
|
|
4
|
+
uses this class for all elements that match the selector ``div.tabs ul`` it's
|
|
5
|
+
usually not required to manually create an instance of this class.
|
|
6
|
+
|
|
7
|
+
The syntax of creating an instance of this class looks like the following:
|
|
8
|
+
|
|
9
|
+
var tabs = new Zen.Tabs(selector[, options]);
|
|
10
|
+
|
|
11
|
+
The first parameter is a CSS selector, the second parameter is an object
|
|
12
|
+
containing various options to customize the instance. Note that the selector
|
|
13
|
+
used should result in a number of ``ul`` elements, not ``div`` elements (or any
|
|
14
|
+
other elements).
|
|
15
|
+
|
|
16
|
+
A short example looks like the following:
|
|
17
|
+
|
|
18
|
+
var tabs = new Zen.Tabs('div.my_tabs ul');
|
|
19
|
+
|
|
20
|
+
The following options can be used to customize the tabs:
|
|
21
|
+
|
|
22
|
+
* default: a selector used to indicate what tab element should be selected by
|
|
23
|
+
default. Set to ``li:first-child`` by default.
|
|
24
|
+
|
|
25
|
+
For the tabs system to work properly you'll need to use the right markup for
|
|
26
|
+
your fields. Luckily this is as simple as creating a ``<div>`` (or another type
|
|
27
|
+
of element) and setting an ID for that element:
|
|
28
|
+
|
|
29
|
+
<!-- The markup for your tabs -->
|
|
30
|
+
<div class="tabs">
|
|
31
|
+
<ul>
|
|
32
|
+
<li>
|
|
33
|
+
<a href="#some_id">Some ID</a>
|
|
34
|
+
</li>
|
|
35
|
+
</ul>
|
|
36
|
+
</div>
|
|
37
|
+
|
|
38
|
+
<!-- The field to show/hide -->
|
|
39
|
+
<div id="some_id">
|
|
40
|
+
|
|
41
|
+
</div>
|
|
42
|
+
|
|
43
|
+
Keep in mind that for the tab system to work properly the URLs for each tab
|
|
44
|
+
should start with a hash sign.
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
# Zen.Window
|
|
2
|
+
|
|
3
|
+
The Window class can be used to display modal windows with (or without) a set of
|
|
4
|
+
custom buttons. These windows can be used for displaying pictures, confirmation
|
|
5
|
+
messages and so on. In order to display a window you'll need to create a new
|
|
6
|
+
instance of the class. The syntax of this looks like the following:
|
|
7
|
+
|
|
8
|
+
var some_window = new Zen.Window(content[, options]);
|
|
9
|
+
|
|
10
|
+
<div class="note deprecated">
|
|
11
|
+
<p>
|
|
12
|
+
<strong>Warning</strong>: When creating an instance of Zen.Window you
|
|
13
|
+
should never save it in a variable named "window" as this is a reserved
|
|
14
|
+
variable that refers to the browser window.
|
|
15
|
+
</p>
|
|
16
|
+
</div>
|
|
17
|
+
|
|
18
|
+
The first parameter is the content to display and can either be plain text or
|
|
19
|
+
HTML. The second parameter is an object containing various options that can be
|
|
20
|
+
used to customize the window. The following options can be set in this object:
|
|
21
|
+
|
|
22
|
+
* height: a number indicating a fixed height to use for the window.
|
|
23
|
+
* width: the same but for the width.
|
|
24
|
+
* title: the title to display in the title bar containing the close button.
|
|
25
|
+
* resize: boolean that when set to true allows the user to resize the window.
|
|
26
|
+
* move: boolean that when set to true allows the user to move the window around.
|
|
27
|
+
* buttons: an array of buttons to display at the bottom of the window.
|
|
28
|
+
|
|
29
|
+
Creating a new window with some of these options would look something like the
|
|
30
|
+
following:
|
|
31
|
+
|
|
32
|
+
var some_window = new Zen.Window('Hello, world!', {title: 'This is a window!'});
|
|
33
|
+
|
|
34
|
+
Note that you're not required to call any extra methods, the window will be
|
|
35
|
+
displayed whenever a new instance of the window is created.
|
|
36
|
+
|
|
37
|
+
Buttons can be added by setting the "buttons" option to an array of objects of
|
|
38
|
+
which each object has the following format:
|
|
39
|
+
|
|
40
|
+
{
|
|
41
|
+
name: 'foobar',
|
|
42
|
+
label: 'Foobar',
|
|
43
|
+
onClick: function() {}
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
* name: the name of the button, should be unique as it's used for the class of
|
|
47
|
+
the ``li`` element of the button.
|
|
48
|
+
* label: the text displayed in the button.
|
|
49
|
+
* onClick: a function that will be called whenever the button is clicked.
|
|
@@ -0,0 +1,201 @@
|
|
|
1
|
+
# Comparing Zen With Others
|
|
2
|
+
|
|
3
|
+
A common question people ask when looking into specific software is "How is this
|
|
4
|
+
different/better compared to X?". One might wonder what the differences are
|
|
5
|
+
between Zen and Wordpress or Zen and Radiant. This guide is meant to clear
|
|
6
|
+
things up a bit.
|
|
7
|
+
|
|
8
|
+
Do note that since I wrote Zen my opinion is more than likely biased.
|
|
9
|
+
|
|
10
|
+
## Zen vs Wordpress
|
|
11
|
+
|
|
12
|
+
There are quite a few differences between Zen and Wordpress besides the language
|
|
13
|
+
that's being used for the two (PHP for Wordpress, Ruby for Zen). Wordpress at
|
|
14
|
+
its core is a blogging engine that was meant to handle blog articles and simple
|
|
15
|
+
static pages. Over the years people started writing plugins and it expanded from
|
|
16
|
+
a blogging engine into a more general purpose content management system.
|
|
17
|
+
However, at its core it still remains a blogging engine and this is something
|
|
18
|
+
you'll quickly notice when trying to use it for something other than a blog or a
|
|
19
|
+
very basic website.
|
|
20
|
+
|
|
21
|
+
Another issue with Wordpress is that it has a (in my opinion) horrible code base
|
|
22
|
+
as well as a badly designed plugin system that promote bad coding standards and
|
|
23
|
+
the mixing of logic and presentation. Wordpress doesn't take full advantage of
|
|
24
|
+
the good parts of PHP such as classes and namespaces and instead mostly relies
|
|
25
|
+
on the use of global functions.
|
|
26
|
+
|
|
27
|
+
A good example of this is the file ``wp-admin/media.php``. This file contains a
|
|
28
|
+
mixture of HTML for the presentation as well as plain PHP for the logic. There's
|
|
29
|
+
logic for enqueing certain actions, displaying error messages as well as
|
|
30
|
+
presentation code for various media files. Instead of separating this into
|
|
31
|
+
controllers, models and views the developers decided to just chuck it all in a
|
|
32
|
+
single file.
|
|
33
|
+
|
|
34
|
+
Sure, Wordpress is pretty easy to use and has a decent looking interface but
|
|
35
|
+
once you have to dive into the code base you'll most likely wish you never
|
|
36
|
+
touched it alltogether.
|
|
37
|
+
|
|
38
|
+
Zen doesn't aim to be a blogging engine or another specific type of content
|
|
39
|
+
management application, not does it aim to be N times faster (I've simply never
|
|
40
|
+
compared it with Wordpress in terms of performance). Instead Zen tries to be
|
|
41
|
+
more right by giving you greater flexibility (without the need for installing
|
|
42
|
+
third party plugins/hacks) as well as a solid code base that is far more
|
|
43
|
+
pleasant to work with.
|
|
44
|
+
|
|
45
|
+
### Installation
|
|
46
|
+
|
|
47
|
+
Unlike Zen Wordpress isn't distributed using a package manager, instead you have
|
|
48
|
+
to manually download, extract and install a compressed archive. In its most
|
|
49
|
+
basic form you'd have to run the following commands to get a copy of Wordpress:
|
|
50
|
+
|
|
51
|
+
$ wget http://wordpress.org/latest.tar.gz
|
|
52
|
+
$ tar -xvf latest.tar.gz
|
|
53
|
+
$ cd wordpress/
|
|
54
|
+
|
|
55
|
+
This process is not only tiring but also makes it harder to upgrade existing
|
|
56
|
+
installations.
|
|
57
|
+
|
|
58
|
+
Zen is distributed using Rubygems and thus all you need to run in order to
|
|
59
|
+
install it is the following command:
|
|
60
|
+
|
|
61
|
+
$ gem install zen
|
|
62
|
+
|
|
63
|
+
If you want to update Zen you simply run ``gem update zen`` instead.
|
|
64
|
+
|
|
65
|
+
## Zen vs Expression Engine
|
|
66
|
+
|
|
67
|
+
Zen was heavily inspired by Expression Engine and was initially written to be
|
|
68
|
+
"Expression Engine done right". The two have a lot of things in common such as
|
|
69
|
+
the ability to create custom fields and sections (called "channels" in EE). Zen
|
|
70
|
+
however takes it a step further and allows you to create custom field methods
|
|
71
|
+
and types (on top of just fields) as well as having a simpler database design
|
|
72
|
+
and a code base that's far more pleasant to work with.
|
|
73
|
+
|
|
74
|
+
Another big difference between the two is that Expression Engine costs money and
|
|
75
|
+
is not open source, Zen on the other hand is completely free and licensed under
|
|
76
|
+
the MIT license. This license gives you the freedom to use Zen for any project
|
|
77
|
+
(both open source and proprietary) without the drawbacks of licenses such as the
|
|
78
|
+
GPL.
|
|
79
|
+
|
|
80
|
+
### Installation
|
|
81
|
+
|
|
82
|
+
Similar to Wordpress you'll have to download a copy of Expression Engine
|
|
83
|
+
yourself. However, EE comes with the requirement of having a user account as
|
|
84
|
+
well as a credit card since Expression Engine is not free nor open source.
|
|
85
|
+
Installing EE comes down to the following:
|
|
86
|
+
|
|
87
|
+
1. Register for an account
|
|
88
|
+
2. Buy a license using a credit card
|
|
89
|
+
3. Download a .zip archive (I'm not sure if they offer Tarballs)
|
|
90
|
+
3. Extract the archive
|
|
91
|
+
|
|
92
|
+
Again just like Wordpress this has to be done for every installation (except for
|
|
93
|
+
the registration part) though this depends on the license you've chosen.
|
|
94
|
+
|
|
95
|
+
## Zen vs Radiant
|
|
96
|
+
|
|
97
|
+
While I have to admit that I'm not very familiar with Radiant it appears that
|
|
98
|
+
Radiant comes with a rather limited set of features out of the box and tries to
|
|
99
|
+
label everything as a page giving you some extra flexibility using so called
|
|
100
|
+
"snippets" and "layouts". I can imagine this being easier to use for some but it
|
|
101
|
+
also greatly limits the flexibility meaning that developers will often have to
|
|
102
|
+
resort to installing or developing (third party) extensions.
|
|
103
|
+
|
|
104
|
+
Another difference between the two is that Zen uses "Etanni" as a template
|
|
105
|
+
engine whereas Radiant uses "Radius". Radius is a template engine that uses HTML
|
|
106
|
+
like tags for its logic whereas Etanni uses plain Ruby. Both have their
|
|
107
|
+
advantages as well as their drawbacks.
|
|
108
|
+
|
|
109
|
+
Plain Ruby code is more flexible but it isn't something you want your users to
|
|
110
|
+
be able to execute (don't worry, Zen escapes the template tags for you).
|
|
111
|
+
|
|
112
|
+
Radius on the other hand is something you can use in your content as it can
|
|
113
|
+
only execute what you've explicitly defined. The downside of this is that
|
|
114
|
+
you'll often end up re-inventing things that can be easily done in plain Ruby.
|
|
115
|
+
|
|
116
|
+
One thing to keep in mind is that Zen doesn't limit you in terms of what engines
|
|
117
|
+
you can use, you can easily use other engines such as Radius or Liquid in
|
|
118
|
+
combination with Etanni.
|
|
119
|
+
|
|
120
|
+
### Installation
|
|
121
|
+
|
|
122
|
+
Just like Zen Radiant can be installed using Rubygems by running the following
|
|
123
|
+
comamnd:
|
|
124
|
+
|
|
125
|
+
$ gem install radiant
|
|
126
|
+
|
|
127
|
+
Other than using a different gem name there are no differences between Zen and
|
|
128
|
+
Radiant when it comes down to installing the two.
|
|
129
|
+
|
|
130
|
+
## Zen vs Refinery CMS
|
|
131
|
+
|
|
132
|
+
I have to admit that I have very little experience with Refinery CMS. What I
|
|
133
|
+
noticed from using the demo was that the interface it uses looks rather boring
|
|
134
|
+
and doesn't feel very pleasant to use. The settings overview is rather confusing
|
|
135
|
+
and managing settings happens in modal windows while managing other rows, such
|
|
136
|
+
as users, happens on an entirely new page.
|
|
137
|
+
|
|
138
|
+
Another thing I noticed is that Refinery CMS, just like Wordpress and Expression
|
|
139
|
+
Engine, assumes you'll only use two markup formats: plain text and HTML. A big
|
|
140
|
+
problem with common WYSIWYG editors such as CKEditor and TinyMCE is that the
|
|
141
|
+
markup they generate is either plain incorrect or otherwise disgusting. CKEditor
|
|
142
|
+
for example has a tendency to insert empty ``<p>`` or ``<div>`` elements in
|
|
143
|
+
your content for no apparent reason.
|
|
144
|
+
|
|
145
|
+
Out of the box Zen offers support for plain text, HTML, Markdown and Textile
|
|
146
|
+
with the ability to easily add your own markup formats. The text editor was
|
|
147
|
+
written with this in mind and produces very clean markup, the drawback being
|
|
148
|
+
that it does not (and most likely never will) support WYSIWYG features. The
|
|
149
|
+
closest thing to this feature is the "Preview" button which opens a modal window
|
|
150
|
+
with the HTML that was generated based on the used markup.
|
|
151
|
+
|
|
152
|
+
Probably the biggest difference of all is that Refinery CMS does not appear to
|
|
153
|
+
have a very flexible content model (out of the box at least). There are a few
|
|
154
|
+
content types such as "Pages", "Images" and "Inquiries" but it's not very clear
|
|
155
|
+
how flexible (or not) these content types are.
|
|
156
|
+
|
|
157
|
+
### Installation
|
|
158
|
+
|
|
159
|
+
Similar to Zen and Radiant Refinery CMS is also installed using Rubygems, this
|
|
160
|
+
can be done by running the following command:
|
|
161
|
+
|
|
162
|
+
$ gem install refinerycms
|
|
163
|
+
|
|
164
|
+
Besides the Gem name there are no other differences in the installation process
|
|
165
|
+
that I know of.
|
|
166
|
+
|
|
167
|
+
## Zen vs Locomotive CMS
|
|
168
|
+
|
|
169
|
+
Locomotive CMS is a rather new application that was released somewhere in the
|
|
170
|
+
end of 2011. It has a similar system like Zen allowing you to create custom
|
|
171
|
+
fields however based on the little experience that I have with Locomotive I'd
|
|
172
|
+
say it's far more limited. I couldn't figure out if there was the ability to add
|
|
173
|
+
your own field types or group them together. Locomotive also doesn't offer a
|
|
174
|
+
flexible way of defining rules for custom fields other than allowing users to
|
|
175
|
+
specify that a certain field is required.
|
|
176
|
+
|
|
177
|
+
The interface used by Locomotive was rather annoying to use and doesn't appear
|
|
178
|
+
to be very useful when presenting large amounts of content due to the fixed
|
|
179
|
+
width of the design. To be honest I'm quite amazed by this since the designer,
|
|
180
|
+
Sacha Grief, seems to be more than capable of designing good looking and useful
|
|
181
|
+
interfaces.
|
|
182
|
+
|
|
183
|
+
Unlike Zen Locomotive doesn't use a relational database but instead uses
|
|
184
|
+
MongoDB. Some might argue that this is better (or worse) but I'm personally not
|
|
185
|
+
too sure about it. I've heard great things about MongoDB but I've also heard and
|
|
186
|
+
read very bad things about it. When I tried it myself I wasn't too impressed
|
|
187
|
+
with it, it gives me the idea somebody wanted to write a relational database
|
|
188
|
+
engine that wasn't a relational database engine.
|
|
189
|
+
|
|
190
|
+
### Installation
|
|
191
|
+
|
|
192
|
+
The installation process of Locomotive looks rather, well, stupid. Instead of
|
|
193
|
+
allowing you to install it using Rubygems and be done with it you have to go
|
|
194
|
+
through multiple steps, starting with setting up a bare Rails installation,
|
|
195
|
+
adding Locomotive to your Gemfile and so on. In total there's about 6 steps
|
|
196
|
+
needed to install it. See
|
|
197
|
+
<http://www.locomotivecms.com/support/installation/engine> for more information.
|
|
198
|
+
|
|
199
|
+
Compared with Zen, which only requires you to run ``gem install zen``, I wonder
|
|
200
|
+
why they ever thought it was a good idea to require so many steps when it can be
|
|
201
|
+
done so much easier.
|