zen 0.4 → 0.4.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (92) hide show
  1. data/.aspell.en.pws +31 -0
  2. data/.gems +1 -1
  3. data/.mailmap +1 -0
  4. data/.travis.yml +13 -7
  5. data/.yardopts +1 -1
  6. data/Rakefile +2 -2
  7. data/guide/changelog.md +23 -5
  8. data/guide/css/common.css +48 -0
  9. data/guide/javascript.md +1 -0
  10. data/guide/javascript/zen_form.md +46 -0
  11. data/guide/zen_compared.md +104 -0
  12. data/lib/zen.rb +21 -12
  13. data/lib/zen/helper/breadcrumb.rb +1 -1
  14. data/lib/zen/helper/message.rb +4 -5
  15. data/lib/zen/language.rb +75 -10
  16. data/lib/zen/markup.rb +20 -8
  17. data/lib/zen/model/init.rb +14 -9
  18. data/lib/zen/model/plugin/events.rb +1 -1
  19. data/lib/zen/package.rb +71 -14
  20. data/lib/zen/package/categories/lib/categories/controller/categories.rb +39 -12
  21. data/lib/zen/package/categories/lib/categories/controller/category_groups.rb +26 -5
  22. data/lib/zen/package/categories/lib/categories/helper/category.rb +37 -6
  23. data/lib/zen/package/categories/lib/categories/helper/category_frontend.rb +2 -2
  24. data/lib/zen/package/categories/lib/categories/view/admin/categories/form.xhtml +26 -29
  25. data/lib/zen/package/comments/lib/comments.rb +9 -1
  26. data/lib/zen/package/comments/lib/comments/anti_spam.rb +1 -1
  27. data/lib/zen/package/comments/lib/comments/controller/comments.rb +59 -14
  28. data/lib/zen/package/comments/lib/comments/controller/comments_form.rb +49 -11
  29. data/lib/zen/package/comments/lib/comments/helper/comment.rb +14 -2
  30. data/lib/zen/package/comments/lib/comments/view/admin/comments/form.xhtml +3 -3
  31. data/lib/zen/package/comments/migrations/1308774099_comment_status.rb +1 -1
  32. data/lib/zen/package/custom_fields/lib/custom_fields/blue_form_parameters.rb +12 -0
  33. data/lib/zen/package/custom_fields/lib/custom_fields/controller/custom_field_groups.rb +24 -6
  34. data/lib/zen/package/custom_fields/lib/custom_fields/controller/custom_field_types.rb +68 -20
  35. data/lib/zen/package/custom_fields/lib/custom_fields/controller/custom_fields.rb +106 -26
  36. data/lib/zen/package/custom_fields/lib/custom_fields/helper/custom_field.rb +50 -11
  37. data/lib/zen/package/custom_fields/lib/custom_fields/view/admin/custom-fields/form.xhtml +2 -2
  38. data/lib/zen/package/dashboard/lib/dashboard/controller/dashboard.rb +1 -1
  39. data/lib/zen/package/menu.rb +6 -1
  40. data/lib/zen/package/menus/lib/menus/controller/menu_items.rb +44 -9
  41. data/lib/zen/package/menus/lib/menus/controller/menus.rb +53 -13
  42. data/lib/zen/package/menus/lib/menus/helper/menu.rb +30 -4
  43. data/lib/zen/package/menus/lib/menus/model/menu.rb +4 -2
  44. data/lib/zen/package/sections/lib/sections/controller/section_entries.rb +48 -9
  45. data/lib/zen/package/sections/lib/sections/controller/sections.rb +77 -21
  46. data/lib/zen/package/sections/lib/sections/helper/section.rb +32 -4
  47. data/lib/zen/package/sections/lib/sections/model/section_entry.rb +1 -1
  48. data/lib/zen/package/sections/lib/sections/view/admin/section-entries/form.xhtml +5 -4
  49. data/lib/zen/package/sections/lib/sections/view/admin/sections/form.xhtml +3 -3
  50. data/lib/zen/package/sections/migrations/1308813320_section_entry_statuses.rb +1 -1
  51. data/lib/zen/package/settings/lib/settings/blue_form_parameters.rb +2 -2
  52. data/lib/zen/package/settings/lib/settings/controller/settings.rb +60 -15
  53. data/lib/zen/package/settings/lib/settings/view/admin/settings/index.xhtml +1 -1
  54. data/lib/zen/package/users/lib/users/controller/user_groups.rb +42 -7
  55. data/lib/zen/package/users/lib/users/controller/users.rb +78 -16
  56. data/lib/zen/package/users/lib/users/helper/users.rb +29 -4
  57. data/lib/zen/package/users/lib/users/view/admin/user-groups/form.xhtml +2 -2
  58. data/lib/zen/package/users/lib/users/view/admin/users/form.xhtml +2 -2
  59. data/lib/zen/public/admin/zen/css/general.css +5 -0
  60. data/lib/zen/public/admin/zen/css/messages.css +1 -0
  61. data/lib/zen/public/admin/zen/css/tables.css +33 -0
  62. data/lib/zen/public/admin/zen/css/tabs.css +8 -0
  63. data/lib/zen/public/admin/zen/js/index.js +21 -2
  64. data/lib/zen/public/admin/zen/js/lib/events.js +45 -0
  65. data/lib/zen/public/admin/zen/js/lib/form.js +229 -0
  66. data/lib/zen/public/admin/zen/js/lib/hash.js +0 -27
  67. data/lib/zen/task/spelling.rake +97 -0
  68. data/lib/zen/task/test.rake +21 -0
  69. data/lib/zen/theme.rb +80 -24
  70. data/lib/zen/validation.rb +1 -1
  71. data/lib/zen/version.rb +1 -1
  72. data/proto/app/config/config.rb.erb +9 -4
  73. data/proto/app/config/middlewares.rb +1 -2
  74. data/spec/README.md +56 -0
  75. data/spec/zen/controller/admin_controller.rb +0 -1
  76. data/spec/zen/controller/preview.rb +0 -1
  77. data/spec/zen/package.rb +32 -0
  78. data/spec/zen/package/categories/controller/categories.rb +7 -0
  79. data/spec/zen/package/categories/controller/category_groups.rb +7 -0
  80. data/spec/zen/package/comments/controller/comments.rb +7 -0
  81. data/spec/zen/package/custom_fields/controller/custom_field_groups.rb +7 -0
  82. data/spec/zen/package/custom_fields/controller/custom_field_types.rb +7 -0
  83. data/spec/zen/package/custom_fields/controller/custom_fields.rb +7 -0
  84. data/spec/zen/package/menus/controller/menu_items.rb +7 -0
  85. data/spec/zen/package/menus/controller/menus.rb +7 -0
  86. data/spec/zen/package/menus/helper/menu_frontend.rb +1 -1
  87. data/spec/zen/package/sections/controller/section_entries.rb +39 -0
  88. data/spec/zen/package/sections/controller/sections.rb +14 -0
  89. data/spec/zen/package/users/controller/user_groups.rb +7 -0
  90. data/spec/zen/package/users/controller/users.rb +7 -0
  91. data/zen.gemspec +6 -5
  92. metadata +142 -40
@@ -48,12 +48,30 @@ module CustomFields
48
48
  # When creating a new group or editing an existing group you can fill in the
49
49
  # following two fields:
50
50
  #
51
- # * **Name** (required): the name of the group, an example of such a name is
52
- # "General group" or "Meta fields".
53
- # * **Description**: a description of the group.
54
- #
55
- # Note that the length of the group name can not be longer than 255
56
- # characters.
51
+ # <table class="table full">
52
+ # <thead>
53
+ # <tr>
54
+ # <th class="field_name">Field</th>
55
+ # <th>Required</th>
56
+ # <th>Maximum Length</th>
57
+ # <th>Description</th>
58
+ # </tr>
59
+ # </thead>
60
+ # <tbody>
61
+ # <tr>
62
+ # <td>Name</td>
63
+ # <td>Yes</td>
64
+ # <td>255</td>
65
+ # <td>The name of the custom field group.</td>
66
+ # </tr>
67
+ # <tr>
68
+ # <td>Description</td>
69
+ # <td>No</td>
70
+ # <td>Unlimited</td>
71
+ # <td>A description of the custom field group.</td>
72
+ # </tr>
73
+ # </tbody>
74
+ # </table>
57
75
  #
58
76
  # ## Used Permissions
59
77
  #
@@ -28,26 +28,74 @@ module CustomFields
28
28
  #
29
29
  # In this form you can specify the following fields:
30
30
  #
31
- # * **Name** (required): the name of the custom field type. This name can be
32
- # anything you like.
33
- # * **Language string** (required): a valid language string that will result
34
- # in a language specific block of text. This text will be used for the
35
- # label.
36
- # * **HTML Class**: a space separated list of HTML classes to apply to the
37
- # field type. The format of this value has to match the regular expression
38
- # ``/^[a-zA-Z\-_0-9\s]*$/``.
39
- # * **Serialize**: whether or not the value of a field using this type
40
- # should be serialized. Set this to "Yes" if a field takes multiple values
41
- # such as a checkbox or a select element with the attribute
42
- # ``multiple="multiple"``.
43
- # * **Allow markup**: whether or not users can use markup, such as Markdown
44
- # in a field using this type.
45
- # * **Custom field method** (required): the name of a method in
46
- # {CustomFields::BlueFormParameters}. This method will be used to generate
47
- # all the parameters for the BlueForm helper.
48
- #
49
- # Note that the name, language string and HTML class can not be longer than
50
- # 255 characters.
31
+ # <table class="table full">
32
+ # <thead>
33
+ # <tr>
34
+ # <th class="field_name">Field</th>
35
+ # <th>Required</th>
36
+ # <th>Maximum Length</th>
37
+ # <th>Description</th>
38
+ # </tr>
39
+ # </thead>
40
+ # <tbody>
41
+ # <tr>
42
+ # <td>Name</td>
43
+ # <td>Yes</td>
44
+ # <td>255</td>
45
+ # <td>The name of the custom field type.</td>
46
+ # </tr>
47
+ # <tr>
48
+ # <td>Language string</td>
49
+ # <td>Yes</td>
50
+ # <td>255</td>
51
+ # <td>
52
+ # The language string to use when displaying the custom
53
+ # field type.
54
+ # </td>
55
+ # </tr>
56
+ # <tr>
57
+ # <td>HTML class</td>
58
+ # <td>No</td>
59
+ # <td>255</td>
60
+ # <td>
61
+ # A space separated list of HTML classes to apply to custom
62
+ # fields of this type. The value of this field should match
63
+ # the pattern <code>/^[a-zA-Z\-_0-9\s]*$/</code>
64
+ # </td>
65
+ # </tr>
66
+ # <tr>
67
+ # <td>Serialize</td>
68
+ # <td>No</td>
69
+ # <td></td>
70
+ # <td>
71
+ # When set the values of custom fields of this type will be
72
+ # serialized using Ruby's Marshal module. This setting is
73
+ # useful for fields that can have multiple values such as
74
+ # checkboxes.
75
+ # </td>
76
+ # </tr>
77
+ # <tr>
78
+ # <td>Allow markup</td>
79
+ # <td>No</td>
80
+ # <td></td>
81
+ # <td>
82
+ # When set custom fields of this type can contain markup
83
+ # other than plain text.
84
+ # </td>
85
+ # </tr>
86
+ # <tr>
87
+ # <td>Custom field method</td>
88
+ # <td>Yes</td>
89
+ # <td></td>
90
+ # <td>
91
+ # The name of the method in the module
92
+ # {CustomFields::BlueFormParameters}. This method will be
93
+ # used for generating the required markup for each field of
94
+ # this type.
95
+ # </td>
96
+ # </tr>
97
+ # </tbody>
98
+ # </table>
51
99
  #
52
100
  # ## Used Permissions
53
101
  #
@@ -24,32 +24,112 @@ module CustomFields
24
24
  #
25
25
  # In this form you can specify the following fields:
26
26
  #
27
- # * **Name** (required): the name of the custom field, can be anything you
28
- # like. Examples are "Body" and "Date picker".
29
- # * **Slug**: a URL friendly version of the name. If none is specified one
30
- # will be generated automatically.
31
- # * **Field type** (required): the type of custom field.
32
- # * **Format** (required): the markup engine to use for the custom field. If
33
- # a custom field type doesn't allow the use of markup this setting will
34
- # be ignored.
35
- # * **Description**: a description of the custom field.
36
- # * **Possible values**: in case a custom field type allows you to specify
37
- # multiple values (such as a checkbox) you can specify a value on each
38
- # line. These values can be specified as following:
39
- #
40
- # key|value
41
- #
42
- # Example:
43
- #
44
- # Yes!|yes
45
- #
46
- # * **Requires a value**: whether or not this field requires a value.
47
- # * **Enable a text editor**: when set to "Yes" the user can use the markup
48
- # editor when adding/editing a value of a field.
49
- # * **Textarea rows**: the amount of rows when the field type is a textarea.
50
- # * **Character limit**: the maximum amount of characters a user can enter
51
- # in the field.
52
- # * **Sort order**: a number that indicates the sort order of the field.
27
+ # <table class="table full">
28
+ # <thead>
29
+ # <tr>
30
+ # <th class="field_name">Field</th>
31
+ # <th>Required</th>
32
+ # <th>Maximum Length</th>
33
+ # <th>Description</th>
34
+ # </tr>
35
+ # </thead>
36
+ # <tbody>
37
+ # <tr>
38
+ # <td>Name</td>
39
+ # <td>Yes</td>
40
+ # <td>255</td>
41
+ # <td>The name of the custom field.</td>
42
+ # </tr>
43
+ # <tr>
44
+ # <td>Slug</td>
45
+ # <td>No</td>
46
+ # <td>255</td>
47
+ # <td>
48
+ # A URL friendly version of the name. If no value is
49
+ # specified the slug will be generated based on the custom
50
+ # field's name.
51
+ # </td>
52
+ # </tr>
53
+ # <tr>
54
+ # <td>Field type</td>
55
+ # <td>Yes</td>
56
+ # <td></td>
57
+ # <td>The custom field type to use.</td>
58
+ # </tr>
59
+ # <tr>
60
+ # <td>Format</td>
61
+ # <td>Yes</td>
62
+ # <td></td>
63
+ # <td>The markup format for values of this custom field.</td>
64
+ # </tr>
65
+ # <tr>
66
+ # <td>Description</td>
67
+ # <td>No</td>
68
+ # <td>Unlimited</td>
69
+ # <td>
70
+ # A description of the custom field, displayed when the user
71
+ # hovers over a custom field's form element.
72
+ # </td>
73
+ # </tr>
74
+ # <tr>
75
+ # <td>Possible values</td>
76
+ # <td>No</td>
77
+ # <td>Unlimited</td>
78
+ # <td>
79
+ # A newline separated list of values that can be specified
80
+ # for custom fields that allow multiple values to be
81
+ # selected (e.g. checkboxes). These values can be specified
82
+ # by writing "key|value" (where "key" and "value" are the
83
+ # name and value of an item) on each line.
84
+ # </td>
85
+ # </tr>
86
+ # <tr>
87
+ # <td>Requires a value</td>
88
+ # <td>No</td>
89
+ # <td></td>
90
+ # <td>
91
+ # When set to "Yes" users are required to enter a value for
92
+ # the custom field.
93
+ # </td>
94
+ # </tr>
95
+ # <tr>
96
+ # <td>Enable a text editor</td>
97
+ # <td>No</td>
98
+ # <td></td>
99
+ # <td>
100
+ # When set to "Yes" the values of the custom field can be
101
+ # set using a markup editor.
102
+ # </td>
103
+ # </tr>
104
+ # <tr>
105
+ # <td>Textarea rows</td>
106
+ # <td>No</td>
107
+ # <td></td>
108
+ # <td>
109
+ # The amount of rows for a textarea field. This value only
110
+ # affects custom fields using the "Textarea" type.
111
+ # </td>
112
+ # </tr>
113
+ # <tr>
114
+ # <td>Character limit</td>
115
+ # <td>No</td>
116
+ # <td></td>
117
+ # <td>
118
+ # The maximum amount of characters that a user can enter in
119
+ # a field.
120
+ # </td>
121
+ # </tr>
122
+ # <tr>
123
+ # <td>Sort order</td>
124
+ # <td>No</td>
125
+ # <td></td>
126
+ # <td>
127
+ # The order in which to display the field when managing a
128
+ # section entry.
129
+ # </td>
130
+ # </tr>
131
+ # </tbody>
132
+ # </table>
53
133
  #
54
134
  # ## Used Permissions
55
135
  #
@@ -1,5 +1,4 @@
1
1
  module Ramaze
2
- #:nodocL
3
2
  module Helper
4
3
  ##
5
4
  # Helper for the custom fields package.
@@ -16,11 +15,12 @@ module Ramaze
16
15
  # @return [CustomFields::Model::CustomFieldGroup]
17
16
  #
18
17
  def validate_custom_field_group(custom_field_group_id)
18
+ redirect_invalid_field_group unless custom_field_group_id =~ /\d+/
19
+
19
20
  group = ::CustomFields::Model::CustomFieldGroup[custom_field_group_id]
20
21
 
21
22
  if group.nil?
22
- message(:error, lang('custom_field_groups.errors.invalid_group'))
23
- redirect(::CustomFields::Controller::CustomFieldGroups.r(:index))
23
+ redirect_invalid_field_group
24
24
  else
25
25
  return group
26
26
  end
@@ -37,15 +37,14 @@ module Ramaze
37
37
  # @return [CustomFields::Model::CustomField]
38
38
  #
39
39
  def validate_custom_field(custom_field_id, custom_field_group_id)
40
+ unless custom_field_id =~ /\d+/
41
+ redirect_invalid_field(custom_field_group_id)
42
+ end
43
+
40
44
  field = ::CustomFields::Model::CustomField[custom_field_id]
41
45
 
42
46
  if field.nil?
43
- message(:error, lang('custom_fields.errors.invalid_field'))
44
- redirect(
45
- ::CustomFields::Controller::CustomFields.r(
46
- :index, custom_field_group_id
47
- )
48
- )
47
+ redirect_invalid_field(custom_field_group_id)
49
48
  else
50
49
  return field
51
50
  end
@@ -60,15 +59,55 @@ module Ramaze
60
59
  # @return [CustomFields::Model::CustomFieldType]
61
60
  #
62
61
  def validate_custom_field_type(custom_field_type_id)
62
+ redirect_invalid_field_type unless custom_field_type_id =~ /\d+/
63
+
63
64
  type = ::CustomFields::Model::CustomFieldType[custom_field_type_id]
64
65
 
65
66
  if type.nil?
66
- message(:error, lang('custom_field_types.errors.invalid_type'))
67
- redirect(::CustomFields::Controller::CustomFieldTypes.r(:index))
67
+ redirect_invalid_field_type
68
68
  else
69
69
  return type
70
70
  end
71
71
  end
72
+
73
+ ##
74
+ # Redirects the user back to the field groups overview and shows a message
75
+ # informing the user that the group he/she tried to access was invalid.
76
+ #
77
+ # @since 05-04-2012
78
+ #
79
+ def redirect_invalid_field_group
80
+ message(:error, lang('custom_field_groups.errors.invalid_group'))
81
+ redirect(::CustomFields::Controller::CustomFieldGroups.r(:index))
82
+ end
83
+
84
+ ##
85
+ # Redirects the user to the custom field types overview and informs
86
+ # him/her that the type he/she tried to access was invalid.
87
+ #
88
+ # @since 05-04-2012
89
+ #
90
+ def redirect_invalid_field_type
91
+ message(:error, lang('custom_field_types.errors.invalid_type'))
92
+ redirect(::CustomFields::Controller::CustomFieldTypes.r(:index))
93
+ end
94
+
95
+ ##
96
+ # Redirects the user to the overview of all custom fields of a given group
97
+ # and informs the user that the field he/she tried to access is invalid.
98
+ #
99
+ # @since 05-04-2012
100
+ # @param [Fixnum] custom_field_group_id The ID of the group to use for
101
+ # redirecting the user.
102
+ #
103
+ def redirect_invalid_field(custom_field_group_id)
104
+ message(:error, lang('custom_fields.errors.invalid_field'))
105
+ redirect(
106
+ ::CustomFields::Controller::CustomFields.r(
107
+ :index, custom_field_group_id
108
+ )
109
+ )
110
+ end
72
111
  end # CustomField
73
112
  end # Helper
74
113
  end # Ramaze
@@ -33,7 +33,7 @@
33
33
  f.input_hidden(:custom_field_group_id, @custom_field_group_id)
34
34
  f.input_hidden(:csrf_token , get_csrf_token)
35
35
 
36
- f.g.div(:id => 'general') do
36
+ f.g.div(:id => 'general', :class => :tab_field) do
37
37
  f.input_text(
38
38
  lang('custom_fields.labels.name'),
39
39
  :name,
@@ -77,7 +77,7 @@
77
77
  )
78
78
  end
79
79
 
80
- f.g.div(:id => 'settings') do
80
+ f.g.div(:id => 'settings', :class => :tab_field) do
81
81
  f.input_radio(
82
82
  lang('custom_fields.labels.required'),
83
83
  :required,
@@ -20,7 +20,7 @@ module Dashboard
20
20
  module Controller
21
21
  ##
22
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,
23
+ # a list of user specific widgets. These widgets can be rearranged,
24
24
  # disabled/enabled and the columns for these widgets can also be customized.
25
25
  #
26
26
  # When you open up the dashboard for the first time only one widget will be
@@ -19,6 +19,9 @@ module Zen
19
19
  # All the child elements of the current navigation element.
20
20
  attr_reader :children
21
21
 
22
+ # Hash containing extra configuration options for the menu.
23
+ attr_reader :options
24
+
22
25
  ##
23
26
  # Creates a new instance of the class and optionally processes all sub
24
27
  # navigation items.
@@ -77,7 +80,9 @@ module Zen
77
80
  def html(permissions = [])
78
81
  # Skip the navigation menu and all it's child elements if the user isn't
79
82
  # allowed to view it.
80
- return if !user_authorized?(@options[:permission])
83
+ if @options[:permission] and !user_authorized?(@options[:permissions])
84
+ return
85
+ end
81
86
 
82
87
  g = Ramaze::Gestalt.new
83
88
  children = []
@@ -30,14 +30,49 @@ module Menus
30
30
  #
31
31
  # In this form you can specify the following fields:
32
32
  #
33
- # * **Name**: the name of the menu item.
34
- # * **URL**: the URL of the menu item.
35
- # * **HTML class**: a space separated list of classes to apply to the HTML
36
- # element.
37
- # * **HTML ID**: a single ID to apply to the HTML element.
38
- #
39
- # Note that the name, URL, HTML class and HTML ID fields have a maximum
40
- # length of 255 characters.
33
+ # <table class="table full">
34
+ # <thead>
35
+ # <tr>
36
+ # <th class="field_name">Field</th>
37
+ # <th>Required</th>
38
+ # <th>Maximum Length</th>
39
+ # <th>Description</th>
40
+ # </tr>
41
+ # </thead>
42
+ # <tbody>
43
+ # <tr>
44
+ # <td>Name</td>
45
+ # <td>Yes</td>
46
+ # <td>255</td>
47
+ # <td>The name of the menu item.</td>
48
+ # </tr>
49
+ # <tr>
50
+ # <td>URL</td>
51
+ # <td>Yes</td>
52
+ # <td>255</td>
53
+ # <td>The URL the menu item should point to.</td>
54
+ # </tr>
55
+ # <tr>
56
+ # <td>HTML class</td>
57
+ # <td>No</td>
58
+ # <td>255</td>
59
+ # <td>
60
+ # A space separated string containing the class(es) to apply
61
+ # to the menu. This value should match the pattern
62
+ # <code>^[a-zA-Z\-_0-9\s]*$</code>.
63
+ # </td>
64
+ # </tr>
65
+ # <tr>
66
+ # <td>HTML ID</td>
67
+ # <td>No</td>
68
+ # <td>255</td>
69
+ # <td>
70
+ # A single ID to apply to the menu. This value should match
71
+ # the pattern <code>^[a-zA-Z\-_0-9]*$</code>.
72
+ # </td>
73
+ # </tr>
74
+ # </tbody>
75
+ # </table>
41
76
  #
42
77
  # ## Used Permissions
43
78
  #
@@ -142,7 +177,7 @@ module Menus
142
177
  end
143
178
 
144
179
  ##
145
- # Saves an existing menu iten or creates a new one using the supplied
180
+ # Saves an existing menu item or creates a new one using the supplied
146
181
  # POST data.
147
182
  #
148
183
  # @since 0.2a