zen 0.3 → 0.4
Sign up to get free protection for your applications and to get access to all the features.
- 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,28 @@
|
|
1
|
+
Zen::Package.add do |p|
|
2
|
+
p.name = :dashboard
|
3
|
+
p.title = 'dashboard.titles.index'
|
4
|
+
p.author = 'Yorick Peterse'
|
5
|
+
p.url = 'http://zen-cms.com/'
|
6
|
+
p.about = 'dashboard.description'
|
7
|
+
p.root = __DIR__('dashboard')
|
8
|
+
p.migrations = __DIR__('../migrations')
|
9
|
+
|
10
|
+
p.menu 'dashboard.titles.index', '/admin'
|
11
|
+
end
|
12
|
+
|
13
|
+
require __DIR__('dashboard/model/widget')
|
14
|
+
require __DIR__('dashboard/controller/dashboard')
|
15
|
+
require __DIR__('dashboard/widget')
|
16
|
+
require __DIR__('dashboard/widget/welcome')
|
17
|
+
|
18
|
+
Zen::Event.listen :after_new_user do |user|
|
19
|
+
Dashboard::Model::Widget.create(
|
20
|
+
:user_id => user.id,
|
21
|
+
:name => 'welcome',
|
22
|
+
:order => 0
|
23
|
+
)
|
24
|
+
end
|
25
|
+
|
26
|
+
Zen::Event.listen :post_start do
|
27
|
+
Zen::Language.load('dashboard')
|
28
|
+
end
|
@@ -0,0 +1,154 @@
|
|
1
|
+
##
|
2
|
+
# Package for the user's dashboard.
|
3
|
+
#
|
4
|
+
# ## Controllers
|
5
|
+
#
|
6
|
+
# * {Dashboard::Controller::Dashboard}
|
7
|
+
#
|
8
|
+
# ## Models
|
9
|
+
#
|
10
|
+
# * {Dashboard::Model::Widget}
|
11
|
+
#
|
12
|
+
# ## Generic Modules & Classes
|
13
|
+
#
|
14
|
+
# * {Dashboard::Widget}
|
15
|
+
# * {Dashboard::WidgetError}
|
16
|
+
#
|
17
|
+
# @since 16-01-2012
|
18
|
+
#
|
19
|
+
module Dashboard
|
20
|
+
module Controller
|
21
|
+
##
|
22
|
+
# Shows the dashboard for the currently logged in user. The dashboard shows
|
23
|
+
# a list of user specific widgets. These widgets can be re-arranged,
|
24
|
+
# disabled/enabled and the columns for these widgets can also be customized.
|
25
|
+
#
|
26
|
+
# When you open up the dashboard for the first time only one widget will be
|
27
|
+
# displayed, the "Welcome" widget. This widget gives a very short
|
28
|
+
# introduction to how widgets work and how to navigate around the
|
29
|
+
# application.
|
30
|
+
#
|
31
|
+
# ![Default Dashboard](../../images/dashboard/dashboard.png)
|
32
|
+
#
|
33
|
+
# Of course the default widget isn't very useful after the first time you've
|
34
|
+
# read it so you might want to turn it off and enable some other widgets
|
35
|
+
# instead. This can be done by first opening the options menu by clicking on
|
36
|
+
# the "Options" button and then choosing which widgets you'd like to be
|
37
|
+
# displayed.
|
38
|
+
#
|
39
|
+
# ![Available Widgets](../../images/dashboard/options.png)
|
40
|
+
#
|
41
|
+
# In this image two widgets are available, "Welcome" (activated by default
|
42
|
+
# for each new user) and the "Recent Entries" widget. In order to activate
|
43
|
+
# the "Recent Entries" widget all you have to do is check the checkbox. Once
|
44
|
+
# done it will be added to your dashboard as shown in the image below.
|
45
|
+
#
|
46
|
+
# ![Added Widget](../../images/dashboard/added.png)
|
47
|
+
#
|
48
|
+
# The options menu also allows you to change the amount of columns for each
|
49
|
+
# row. You can choose between 1 and 4 columns.
|
50
|
+
#
|
51
|
+
# ![Widget Columns](../../images/dashboard/columns.png)
|
52
|
+
#
|
53
|
+
# ## Available Widgets
|
54
|
+
#
|
55
|
+
# Zen comes with the following widgets:
|
56
|
+
#
|
57
|
+
# * Welcome: gives a short introduction to widgets and how to navigate
|
58
|
+
# around the application.
|
59
|
+
# * Recent Entries: a widget that displays the 10 most recent entries.
|
60
|
+
#
|
61
|
+
# @since 08-01-2012
|
62
|
+
# @map /admin
|
63
|
+
#
|
64
|
+
class Dashboard < Zen::Controller::AdminController
|
65
|
+
map '/admin'
|
66
|
+
title 'dashboard.titles.%s'
|
67
|
+
|
68
|
+
serve :css, ['admin/dashboard/css/dashboard'], :name => 'dashboard'
|
69
|
+
serve :javascript, ['admin/dashboard/js/dashboard'], :name => 'dashboard'
|
70
|
+
|
71
|
+
set_layout nil => [:widget_state, :widget_order, :widget_columns],
|
72
|
+
:admin => [:index]
|
73
|
+
|
74
|
+
##
|
75
|
+
# Shows all the active widgets and allows the user to manage these widgets
|
76
|
+
# or add new ones.
|
77
|
+
#
|
78
|
+
# @since 08-01-2012
|
79
|
+
#
|
80
|
+
def index; end
|
81
|
+
|
82
|
+
##
|
83
|
+
# Updates the sort order of all the widgets for the currently logged in
|
84
|
+
# user.
|
85
|
+
#
|
86
|
+
# @since 15-01-2012
|
87
|
+
#
|
88
|
+
def widget_order
|
89
|
+
::Dashboard::Widget::REGISTERED.each do |name, widget|
|
90
|
+
_name = name.to_s
|
91
|
+
|
92
|
+
if request.POST[_name] and request.POST[_name] =~ /\d+/
|
93
|
+
row = ::Dashboard::Model::Widget[
|
94
|
+
:name => _name,
|
95
|
+
:user_id => user.id
|
96
|
+
]
|
97
|
+
|
98
|
+
unless row.nil?
|
99
|
+
row.update(:order => request.POST[_name])
|
100
|
+
end
|
101
|
+
end
|
102
|
+
end
|
103
|
+
end
|
104
|
+
|
105
|
+
##
|
106
|
+
# Enables or disables a widget for the currently logged in user.
|
107
|
+
#
|
108
|
+
# @since 15-01-2012
|
109
|
+
#
|
110
|
+
def widget_state
|
111
|
+
widget = request.POST['widget']
|
112
|
+
enabled = request.POST['enabled'] == '1' ? true : false
|
113
|
+
|
114
|
+
if !widget.nil? and !widget.empty? \
|
115
|
+
and ::Dashboard::Widget::REGISTERED.key?(widget.to_sym)
|
116
|
+
row = ::Dashboard::Model::Widget[
|
117
|
+
:name => widget,
|
118
|
+
:user_id => user.id
|
119
|
+
]
|
120
|
+
|
121
|
+
if enabled == true
|
122
|
+
if row.nil?
|
123
|
+
last_order = ::Dashboard::Model::Widget.last_order(user.id)
|
124
|
+
|
125
|
+
::Dashboard::Model::Widget.create(
|
126
|
+
:name => widget,
|
127
|
+
:user_id => user.id,
|
128
|
+
:order => last_order + 1
|
129
|
+
)
|
130
|
+
|
131
|
+
respond(::Dashboard::Widget[widget].html, 201)
|
132
|
+
end
|
133
|
+
else
|
134
|
+
row.destroy
|
135
|
+
end
|
136
|
+
end
|
137
|
+
end
|
138
|
+
|
139
|
+
##
|
140
|
+
# Updates the amount of widget columns to use for the currently logged in
|
141
|
+
# user.
|
142
|
+
#
|
143
|
+
# @since 15-01-2012
|
144
|
+
#
|
145
|
+
def widget_columns
|
146
|
+
columns = request.POST['columns']
|
147
|
+
|
148
|
+
if !columns.nil? and !columns.empty? and columns =~ /\d+/
|
149
|
+
user.update(:widget_columns => columns)
|
150
|
+
end
|
151
|
+
end
|
152
|
+
end # Dashboard
|
153
|
+
end # Controller
|
154
|
+
end # Zen
|
@@ -0,0 +1,35 @@
|
|
1
|
+
Zen::Language::Translation.add do |trans|
|
2
|
+
trans.language = 'en'
|
3
|
+
trans.name = 'dashboard'
|
4
|
+
|
5
|
+
trans.translate do |t|
|
6
|
+
t['titles.index'] = 'Dashboard'
|
7
|
+
t['buttons.options'] = 'Options'
|
8
|
+
t['labels.columns'] = 'Columns'
|
9
|
+
t['labels.active_widgets'] = 'Active Widgets'
|
10
|
+
t['labels.documentation'] = 'Documentation'
|
11
|
+
t['labels.github'] = 'Github Project'
|
12
|
+
t['labels.mailing_list'] = 'Mailing List'
|
13
|
+
t['widgets.titles.welcome'] = 'Welcome'
|
14
|
+
|
15
|
+
t['widgets.welcome.content.paragraph_1'] = <<TXT.strip
|
16
|
+
Welcome to Zen %s. What you are seeing here is the dashboard of your website.
|
17
|
+
This little box here is called a "widget". Widgets are displayed on the
|
18
|
+
dashboard and contain small amounts of data such as this help message or a list
|
19
|
+
of recent entries. Don't like a widget? You can customize the active widgets by
|
20
|
+
clicking the "Options" button at the top right.
|
21
|
+
TXT
|
22
|
+
|
23
|
+
t['widgets.welcome.content.paragraph_2'] = <<TXT.strip
|
24
|
+
To the left is the name of your website, a few user specific actions and the
|
25
|
+
main navigation menu. You can use this menu to navigate through the
|
26
|
+
administration panel of your website. Clicking on the name of your website (or
|
27
|
+
on the "Dashboard" link) will bring you back to this page.
|
28
|
+
TXT
|
29
|
+
|
30
|
+
t['widgets.welcome.content.paragraph_3'] = 'For more information see the ' \
|
31
|
+
'following links:'
|
32
|
+
|
33
|
+
t['description'] = 'Dashboard with custom widgets for each user.'
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
Zen::Language::Translation.add do |trans|
|
2
|
+
trans.language = 'nl'
|
3
|
+
trans.name = 'dashboard'
|
4
|
+
|
5
|
+
trans.translate do |t|
|
6
|
+
t['titles.index'] = 'Dashboard'
|
7
|
+
t['buttons.options'] = 'Opties'
|
8
|
+
t['labels.columns'] = 'Kolommen'
|
9
|
+
t['labels.active_widgets'] = 'Actieve widgets'
|
10
|
+
t['labels.documentation'] = 'Documentatie'
|
11
|
+
t['labels.github'] = 'Github project'
|
12
|
+
t['labels.mailing_list'] = 'Discussie groep'
|
13
|
+
t['widgets.titles.welcome'] = 'Welkom'
|
14
|
+
|
15
|
+
t['widgets.welcome.content.paragraph_1'] = <<TXT.strip
|
16
|
+
Welkom bij Zen %s. Wat u nu voor u ziet is het dashboard van uw website. Dit
|
17
|
+
kleine blok heet een "widget". Widgets worden weergegeven op het dashboard en
|
18
|
+
bevatten kleine hoeveelheden aan data zoals dit help bericht of een lijst met
|
19
|
+
recente artikelen. Vind u een bepaalde widget maar niks? Geen probleem. Widgets
|
20
|
+
kunnen aan of uit worden gezet door op de knop "Opties" te klikken, deze knop
|
21
|
+
vind u in de rechter bovenhoek van deze pagina.
|
22
|
+
TXT
|
23
|
+
|
24
|
+
t['widgets.welcome.content.paragraph_2'] = <<TXT.strip
|
25
|
+
Aan de linker kant van deze pagina vind u de naam van uw website, een paar
|
26
|
+
gebruikers specifieke acties en het hoofd navigatie menu. Met dit menu kunt u
|
27
|
+
rond navigeren door het beheerders paneel van uw website. Door op de naam te
|
28
|
+
klikken (of op de "Dashboard" link) komt u weer terug op deze pagina.
|
29
|
+
TXT
|
30
|
+
|
31
|
+
t['widgets.welcome.content.paragraph_3'] = 'Zie de volgende links voor ' \
|
32
|
+
'meer informatie:'
|
33
|
+
|
34
|
+
t['description'] = 'Dashboard met aanpasbare widgets voor elke gebruiker.'
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
module Dashboard
|
2
|
+
module Model
|
3
|
+
##
|
4
|
+
# Model for the table that contains the active widgets for a user.
|
5
|
+
#
|
6
|
+
# @since 12-01-2012
|
7
|
+
#
|
8
|
+
class Widget < Sequel::Model
|
9
|
+
many_to_one :users, :class => 'Users::Model::User'
|
10
|
+
|
11
|
+
##
|
12
|
+
# Returns an integer containing the order of the last widget. If no
|
13
|
+
# widgets were found 0 is returned.
|
14
|
+
#
|
15
|
+
# @since 15-01-2012
|
16
|
+
# @param [Fixnum] user_id The ID of the user for which to retrieve the
|
17
|
+
# widget order.
|
18
|
+
# @return [Fixnum]
|
19
|
+
#
|
20
|
+
def self.last_order(user_id)
|
21
|
+
rows = select(:order) \
|
22
|
+
.filter(:user_id => user_id) \
|
23
|
+
.order(:order.desc) \
|
24
|
+
.limit(1) \
|
25
|
+
.all
|
26
|
+
|
27
|
+
if rows.empty?
|
28
|
+
return 0
|
29
|
+
else
|
30
|
+
return rows[0].order
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
##
|
35
|
+
# Validates the model instance before saving it in the database.
|
36
|
+
#
|
37
|
+
# @since 13-01-2012
|
38
|
+
#
|
39
|
+
def validate
|
40
|
+
validates_presence([:name, :order, :user_id])
|
41
|
+
validates_integer(:user_id)
|
42
|
+
end
|
43
|
+
end # Widget
|
44
|
+
end # Model
|
45
|
+
end # Dashboard
|
@@ -0,0 +1,74 @@
|
|
1
|
+
.widget
|
2
|
+
{
|
3
|
+
border: 1px solid #aaa;
|
4
|
+
background: #fff;
|
5
|
+
float: left;
|
6
|
+
margin-bottom: 30px;
|
7
|
+
min-height: 150px;
|
8
|
+
vertical-align: top;
|
9
|
+
width: 100%;
|
10
|
+
}
|
11
|
+
|
12
|
+
.widget header
|
13
|
+
{
|
14
|
+
cursor: move;
|
15
|
+
padding: 0px 15px!important;
|
16
|
+
}
|
17
|
+
|
18
|
+
.widget header h1
|
19
|
+
{
|
20
|
+
font-size: 20px;
|
21
|
+
}
|
22
|
+
|
23
|
+
/* Different styles for the various column widths. */
|
24
|
+
.columns_2 .widget, .columns_3 .widget, .columns_4 .widget
|
25
|
+
{
|
26
|
+
margin-right: 2%;
|
27
|
+
}
|
28
|
+
|
29
|
+
.columns_2 .widget
|
30
|
+
{
|
31
|
+
width: 47.9%;
|
32
|
+
}
|
33
|
+
|
34
|
+
.columns_3 .widget
|
35
|
+
{
|
36
|
+
width: 30.9%;
|
37
|
+
}
|
38
|
+
|
39
|
+
.columns_4 .widget
|
40
|
+
{
|
41
|
+
width: 22.9%;
|
42
|
+
}
|
43
|
+
|
44
|
+
/* Styles for the box that allows users to customize the dashboard layout. */
|
45
|
+
#widget_options
|
46
|
+
{
|
47
|
+
background: #f2f2f2;
|
48
|
+
border-left: 1px solid #ccc;
|
49
|
+
border-right: 1px solid #ccc;
|
50
|
+
border-bottom: 1px solid #ccc;
|
51
|
+
display: none;
|
52
|
+
margin: 0 15px;
|
53
|
+
padding: 15px;
|
54
|
+
|
55
|
+
box-shadow: 0px 0px 2px #ccc;
|
56
|
+
-webkit-box-shadow: 0px 0px 2px #ccc;
|
57
|
+
-moz-box-shadow: 0px 0px 2px #ccc;
|
58
|
+
}
|
59
|
+
|
60
|
+
#widget_options label
|
61
|
+
{
|
62
|
+
width: 200px;
|
63
|
+
}
|
64
|
+
|
65
|
+
#widget_options #widget_columns
|
66
|
+
{
|
67
|
+
margin-bottom: 15px;
|
68
|
+
}
|
69
|
+
|
70
|
+
#toggle_options
|
71
|
+
{
|
72
|
+
float: right;
|
73
|
+
margin: 3px 0px 0px 0px;
|
74
|
+
}
|
@@ -0,0 +1,102 @@
|
|
1
|
+
window.addEvent('domready', function()
|
2
|
+
{
|
3
|
+
var widgets = $('widgets');
|
4
|
+
var options_fx = new Fx.Slide('widget_options',
|
5
|
+
{
|
6
|
+
duration: 'normal',
|
7
|
+
transition: Fx.Transitions.Pow.easeOut
|
8
|
+
});
|
9
|
+
|
10
|
+
options_fx.hide();
|
11
|
+
|
12
|
+
// The options div is hidden by default, without doing this the div would be
|
13
|
+
// displayed for a split second before it's hidden using Fx.Slide. However,
|
14
|
+
// Fx.Slide doesn't use the "display" property so it has to be removed
|
15
|
+
// manually.
|
16
|
+
$('widget_options').setStyle('display', 'block');
|
17
|
+
|
18
|
+
$('toggle_options').addEvent('click', function()
|
19
|
+
{
|
20
|
+
options_fx.toggle();
|
21
|
+
});
|
22
|
+
|
23
|
+
// Allow users to sort the widgets.
|
24
|
+
var sortable_widgets = new Sortables('widgets',
|
25
|
+
{
|
26
|
+
handle: 'header',
|
27
|
+
opacity: 0.5,
|
28
|
+
revert: true,
|
29
|
+
clone: true,
|
30
|
+
onSort: function(el)
|
31
|
+
{
|
32
|
+
var order = {};
|
33
|
+
|
34
|
+
// Build the new order for all the widgets. The "widget_" prefix is
|
35
|
+
// removed before the values are being sent to the server.
|
36
|
+
sortable_widgets.serialize().clean().each(function(val, index)
|
37
|
+
{
|
38
|
+
order[val.replace(/widget_/, '')] = index;
|
39
|
+
});
|
40
|
+
|
41
|
+
new Request(
|
42
|
+
{
|
43
|
+
url: '/admin/widget_order',
|
44
|
+
method: 'POST',
|
45
|
+
data: order
|
46
|
+
}).send();
|
47
|
+
}
|
48
|
+
});
|
49
|
+
|
50
|
+
// Update the amount of columns based on the clicked radio button.
|
51
|
+
$$('#widget_columns input[type="radio"]').addEvent('click', function()
|
52
|
+
{
|
53
|
+
var columns = this.get('value');
|
54
|
+
|
55
|
+
widgets.set('class', 'widgets ' + 'columns_' + columns);
|
56
|
+
|
57
|
+
new Request(
|
58
|
+
{
|
59
|
+
url: '/admin/widget_columns',
|
60
|
+
method: 'POST',
|
61
|
+
data: {columns: columns}
|
62
|
+
}).send();
|
63
|
+
});
|
64
|
+
|
65
|
+
// Toggle the visibility of a widget and update its state in the database.
|
66
|
+
$$('#active_widgets input[type="checkbox"]').addEvent('click', function()
|
67
|
+
{
|
68
|
+
var el = $(this.get('value'));
|
69
|
+
var name = this.get('value').replace(/^widget_/, '');
|
70
|
+
var enabled = '0';
|
71
|
+
|
72
|
+
if ( this.get('checked') === true )
|
73
|
+
{
|
74
|
+
enabled = '1';
|
75
|
+
}
|
76
|
+
else
|
77
|
+
{
|
78
|
+
if ( el ) el.destroy();
|
79
|
+
}
|
80
|
+
|
81
|
+
// Request.HTML doesn't really offer any benefits in this case so using
|
82
|
+
// plain Request is fine.
|
83
|
+
var request = new Request(
|
84
|
+
{
|
85
|
+
url: '/admin/widget_state',
|
86
|
+
method: 'POST',
|
87
|
+
data: {widget: name, enabled: enabled},
|
88
|
+
onSuccess: function(response)
|
89
|
+
{
|
90
|
+
if ( response && request.status === 201 )
|
91
|
+
{
|
92
|
+
response = Elements.from(response);
|
93
|
+
|
94
|
+
widgets.adopt(response);
|
95
|
+
sortable_widgets.addItems(response);
|
96
|
+
}
|
97
|
+
}
|
98
|
+
});
|
99
|
+
|
100
|
+
request.send();
|
101
|
+
});
|
102
|
+
});
|