zen 0.2.4.1 → 0.2.5
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/MANIFEST +42 -33
- data/README.md +14 -27
- data/ROADMAP.md +20 -2
- data/{Thorfile → Rakefile} +2 -3
- data/bin/zen +27 -5
- data/lib/zen.rb +70 -52
- data/lib/zen/asset.rb +258 -0
- data/lib/zen/bin/app.rb +42 -0
- data/lib/zen/controller/admin_controller.rb +53 -36
- data/lib/zen/controller/base_controller.rb +13 -8
- data/lib/zen/controller/frontend_controller.rb +4 -3
- data/lib/zen/controller/main_controller.rb +17 -33
- data/lib/zen/error/validation_error.rb +10 -0
- data/lib/zen/ext/string.rb +185 -0
- data/lib/zen/helper/acl.rb +120 -92
- data/lib/zen/helper/common.rb +1 -3
- data/lib/zen/helper/theme.rb +73 -0
- data/lib/zen/language.rb +66 -57
- data/lib/zen/layout/admin.xhtml +5 -48
- data/lib/zen/layout/login.xhtml +4 -44
- data/lib/zen/model/methods.rb +1 -1
- data/lib/zen/model/settings.rb +0 -3
- data/lib/zen/package.rb +101 -83
- data/lib/zen/package/base.rb +62 -0
- data/lib/zen/package/categories/lib/categories.rb +29 -10
- data/lib/zen/package/categories/lib/categories/controller/categories.rb +4 -5
- data/lib/zen/package/categories/lib/categories/controller/category_groups.rb +4 -5
- data/lib/zen/package/categories/lib/categories/language/en/category_groups.yml +4 -3
- data/lib/zen/package/categories/lib/categories/model/category.rb +2 -2
- data/lib/zen/package/categories/lib/categories/model/category_group.rb +3 -3
- data/lib/zen/package/categories/lib/categories/plugin/categories.rb +130 -0
- data/lib/zen/package/categories/lib/categories/view/admin/categories/form.xhtml +1 -1
- data/lib/zen/package/categories/lib/categories/view/admin/categories/index.xhtml +2 -2
- data/lib/zen/package/categories/lib/categories/view/admin/category-groups/index.xhtml +11 -6
- data/lib/zen/package/comments/lib/comments.rb +23 -13
- data/lib/zen/package/comments/lib/comments/controller/comments.rb +4 -5
- data/lib/zen/package/comments/lib/comments/controller/comments_form.rb +7 -8
- data/lib/zen/package/comments/lib/comments/model/comment.rb +4 -4
- data/lib/zen/package/comments/lib/comments/plugin/comments.rb +111 -0
- data/lib/zen/package/comments/lib/comments/view/admin/comments/form.xhtml +2 -2
- data/lib/zen/package/comments/lib/comments/view/admin/comments/index.xhtml +3 -3
- data/lib/zen/package/custom_fields/lib/custom_fields.rb +18 -11
- data/lib/zen/package/custom_fields/lib/custom_fields/controller/custom_field_groups.rb +4 -5
- data/lib/zen/package/custom_fields/lib/custom_fields/controller/custom_fields.rb +4 -5
- data/lib/zen/package/custom_fields/lib/custom_fields/model/custom_field.rb +2 -2
- data/lib/zen/package/custom_fields/lib/custom_fields/model/custom_field_group.rb +3 -3
- data/lib/zen/package/custom_fields/lib/custom_fields/model/custom_field_value.rb +3 -3
- data/lib/zen/package/custom_fields/lib/custom_fields/view/admin/custom-field-groups/index.xhtml +9 -5
- data/lib/zen/package/custom_fields/lib/custom_fields/view/admin/custom-fields/form.xhtml +1 -1
- data/lib/zen/package/custom_fields/lib/custom_fields/view/admin/custom-fields/index.xhtml +3 -3
- data/lib/zen/package/menus/lib/menus.rb +25 -43
- data/lib/zen/package/menus/lib/menus/controller/menu_items.rb +5 -6
- data/lib/zen/package/menus/lib/menus/controller/menus.rb +9 -5
- data/lib/zen/package/menus/lib/menus/helper/menu_item.rb +4 -4
- data/lib/zen/package/menus/lib/menus/model/menu.rb +2 -2
- data/lib/zen/package/menus/lib/menus/model/menu_item.rb +4 -1
- data/lib/zen/package/menus/lib/menus/plugin/menus.rb +152 -0
- data/lib/zen/package/menus/lib/menus/view/admin/menu-items/form.xhtml +1 -1
- data/lib/zen/package/menus/lib/menus/view/admin/menu-items/index.xhtml +3 -3
- data/lib/zen/package/menus/lib/menus/view/admin/menus/index.xhtml +7 -7
- data/lib/zen/package/sections/lib/sections.rb +32 -16
- data/lib/zen/package/sections/lib/sections/controller/section_entries.rb +9 -18
- data/lib/zen/package/sections/lib/sections/controller/sections.rb +8 -9
- data/lib/zen/package/sections/lib/sections/language/en/section_entries.yml +1 -1
- data/lib/zen/package/sections/lib/sections/model/section.rb +4 -4
- data/lib/zen/package/sections/lib/sections/model/section_entry.rb +9 -10
- data/lib/zen/package/sections/lib/sections/plugin/section_entries.rb +224 -0
- data/lib/zen/package/sections/lib/sections/plugin/sections.rb +85 -0
- data/lib/zen/package/sections/lib/sections/view/admin/form.xhtml +1 -1
- data/lib/zen/package/sections/lib/sections/view/admin/index.xhtml +9 -5
- data/lib/zen/package/sections/lib/sections/view/admin/section-entries/index.xhtml +2 -2
- data/lib/zen/package/settings/lib/settings.rb +145 -10
- data/lib/zen/package/settings/lib/settings/controller/settings.rb +28 -24
- data/lib/zen/package/settings/lib/settings/language/en/settings.yml +10 -0
- data/lib/zen/package/settings/lib/settings/model/setting.rb +3 -64
- data/lib/zen/package/settings/lib/settings/plugin/group_base.rb +40 -0
- data/lib/zen/package/settings/lib/settings/plugin/setting_base.rb +76 -0
- data/lib/zen/package/settings/lib/settings/plugin/settings.rb +236 -0
- data/lib/zen/package/settings/lib/settings/view/admin/settings/index.xhtml +20 -49
- data/lib/zen/package/settings/migrations/1295597111_create_schema.rb +0 -12
- data/lib/zen/package/settings/migrations/1303196915_settings_plugin.rb +31 -0
- data/lib/zen/package/users/lib/users.rb +18 -15
- data/lib/zen/package/users/lib/users/controller/access_rules.rb +44 -8
- data/lib/zen/package/users/lib/users/controller/user_groups.rb +4 -5
- data/lib/zen/package/users/lib/users/controller/users.rb +5 -6
- data/lib/zen/package/users/lib/users/language/en/access_rules.yml +11 -9
- data/lib/zen/package/users/lib/users/model/access_rule.rb +7 -6
- data/lib/zen/package/users/lib/users/model/user.rb +4 -4
- data/lib/zen/package/users/lib/users/model/user_group.rb +3 -3
- data/lib/zen/package/users/lib/users/public/admin/js/users/access_rules.js +50 -0
- data/lib/zen/package/users/lib/users/view/admin/access-rules/form.xhtml +32 -29
- data/lib/zen/package/users/lib/users/view/admin/access-rules/index.xhtml +8 -6
- data/lib/zen/package/users/lib/users/view/admin/user-groups/index.xhtml +3 -3
- data/lib/zen/package/users/lib/users/view/admin/users/index.xhtml +2 -2
- data/lib/zen/package/users/migrations/1303510943_class_rules.rb +13 -0
- data/lib/zen/plugin.rb +110 -104
- data/lib/zen/plugin/base.rb +46 -0
- data/lib/zen/{liquid/controller_behavior.rb → plugin/controller.rb} +9 -7
- data/lib/zen/plugin/helper.rb +47 -0
- data/lib/zen/plugin/markup/lib/markup.rb +14 -0
- data/lib/zen/plugin/markup/lib/markup/language/en/markup.yml +6 -0
- data/lib/zen/plugin/markup/lib/markup/markup.rb +154 -0
- data/lib/zen/public/admin/css/forms.css +4 -0
- data/lib/zen/public/admin/css/general.css +15 -15
- data/lib/zen/public/admin/css/layout.css +10 -10
- data/lib/zen/public/admin/css/reset.css +123 -0
- data/lib/zen/public/admin/images/icons/accept.png +0 -0
- data/lib/zen/public/admin/images/icons/add.png +0 -0
- data/lib/zen/public/admin/images/icons/back.png +0 -0
- data/lib/zen/public/admin/images/icons/bold.png +0 -0
- data/lib/zen/public/admin/images/icons/close.png +0 -0
- data/lib/zen/public/admin/images/icons/delete.png +0 -0
- data/lib/zen/public/admin/images/icons/edit.png +0 -0
- data/lib/zen/public/admin/images/icons/error.png +0 -0
- data/lib/zen/public/admin/images/icons/help.png +0 -0
- data/lib/zen/public/admin/images/icons/info.png +0 -0
- data/lib/zen/public/admin/images/icons/italic.png +0 -0
- data/lib/zen/public/admin/images/icons/large/error.png +0 -0
- data/lib/zen/public/admin/images/icons/large/notice.png +0 -0
- data/lib/zen/public/admin/images/icons/large/success.png +0 -0
- data/lib/zen/public/admin/images/icons/link.png +0 -0
- data/lib/zen/public/admin/images/icons/logout.png +0 -0
- data/lib/zen/public/admin/images/icons/ol.png +0 -0
- data/lib/zen/public/admin/images/icons/pdf.png +0 -0
- data/lib/zen/public/admin/images/icons/ul.png +0 -0
- data/lib/zen/public/admin/images/icons/user.png +0 -0
- data/lib/zen/public/admin/images/icons/view.png +0 -0
- data/lib/zen/public/admin/js/mootools/core.js +384 -333
- data/lib/zen/public/admin/js/mootools/more.js +256 -231
- data/lib/zen/public/admin/js/vendor/{datepicker/Picker.Date.js → datepicker.js} +447 -0
- data/lib/zen/public/admin/js/vendor/yepnope.js +1 -0
- data/lib/zen/public/admin/js/zen/editor/base.js +8 -1
- data/lib/zen/public/admin/js/zen/init.js +89 -26
- data/lib/zen/public/favicon.ico +0 -0
- data/lib/zen/task.rb +7 -0
- data/lib/zen/task/build.rake +60 -0
- data/lib/zen/task/clean.rake +27 -0
- data/lib/zen/task/db.rake +111 -0
- data/lib/zen/task/package.rake +67 -0
- data/lib/zen/task/plugin.rake +24 -0
- data/lib/zen/task/proto.rake +95 -0
- data/lib/zen/task/theme.rake +68 -0
- data/lib/zen/theme.rb +28 -55
- data/lib/zen/theme/base.rb +64 -0
- data/lib/zen/validation.rb +149 -0
- data/lib/zen/version.rb +1 -1
- data/lib/zen/view/bottom.xhtml +6 -0
- data/lib/zen/view/main.xhtml +32 -0
- data/proto/app/Rakefile +12 -0
- data/proto/app/app.rb +6 -6
- data/proto/app/config/config.rb +7 -14
- data/proto/app/config/database.rb +0 -20
- data/proto/app/start.rb +0 -1
- data/proto/app/{vendor/themes → task}/.gitkeep +0 -0
- data/proto/app/vendor/theme/.gitkeep +0 -0
- data/proto/package/lib/package.rb +8 -17
- data/proto/package/lib/package/controller/controllers.rb +4 -4
- data/proto/package/lib/package/language/en/languages.yml +3 -3
- data/proto/package/lib/package/model/model.rb +1 -1
- metadata +73 -73
- data/lib/zen/bin/base.rb +0 -109
- data/lib/zen/helper/asset.rb +0 -106
- data/lib/zen/liquid/general.rb +0 -94
- data/lib/zen/liquid/redirect.rb +0 -70
- data/lib/zen/liquid/strip.rb +0 -60
- data/lib/zen/package/categories/lib/categories/liquid/categories.rb +0 -16
- data/lib/zen/package/comments/lib/comments/liquid/comment_form.rb +0 -127
- data/lib/zen/package/comments/lib/comments/liquid/comments.rb +0 -115
- data/lib/zen/package/menus/lib/menus/liquid/menus.rb +0 -152
- data/lib/zen/package/sections/lib/sections/liquid/section_entries.rb +0 -228
- data/lib/zen/package/sections/lib/sections/liquid/sections.rb +0 -77
- data/lib/zen/package/settings/lib/settings/liquid/setting.rb +0 -58
- data/lib/zen/package/users/lib/users/liquid/user.rb +0 -77
- data/lib/zen/package/users/lib/users/liquid/users.rb +0 -82
- data/lib/zen/plugin/markup.rb +0 -30
- data/lib/zen/public/admin/css/boilerplate.css +0 -176
- data/lib/zen/public/admin/images/general/noise.jpg +0 -0
- data/lib/zen/public/admin/js/vendor/datepicker/Picker.Attach.js +0 -137
- data/lib/zen/public/admin/js/vendor/datepicker/Picker.js +0 -291
- data/lib/zen/public/admin/js/vendor/datepicker/README.md +0 -325
- data/lib/zen/public/admin/js/vendor/datepicker/locale.js +0 -16
- data/lib/zen/strict_struct.rb +0 -36
- data/lib/zen/task/build.rb +0 -123
- data/lib/zen/task/clean.rb +0 -46
- data/lib/zen/task/db.rb +0 -130
- data/lib/zen/task/package.rb +0 -87
- data/lib/zen/task/proto.rb +0 -116
- data/lib/zen/task/theme.rb +0 -88
- data/proto/app/Thorfile +0 -4
data/lib/zen/helper/common.rb
CHANGED
|
@@ -148,9 +148,7 @@ module Ramaze
|
|
|
148
148
|
# @return [String]
|
|
149
149
|
#
|
|
150
150
|
def cycle(*args)
|
|
151
|
-
|
|
152
|
-
@@cycle_counter = 0
|
|
153
|
-
end
|
|
151
|
+
@@cycle_counter ||= 0
|
|
154
152
|
|
|
155
153
|
# Check the current counter and reset it if it matches the total amount of arguments
|
|
156
154
|
if @@cycle_counter >= args.count
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
require __DIR__('../error/theme_error')
|
|
2
|
+
|
|
3
|
+
#:nodoc:
|
|
4
|
+
module Ramaze
|
|
5
|
+
#:nodoc:
|
|
6
|
+
module Helper
|
|
7
|
+
##
|
|
8
|
+
# Helper that provides a few methods that make certain tasks easier when creating
|
|
9
|
+
# themes and templates.
|
|
10
|
+
#
|
|
11
|
+
# @author Yorick Peterse
|
|
12
|
+
# @since 0.2.5
|
|
13
|
+
#
|
|
14
|
+
module Theme
|
|
15
|
+
|
|
16
|
+
##
|
|
17
|
+
# Renders a partial from the current theme's partial directory. The first argument
|
|
18
|
+
# is the name of the partial (without an extension) to render. The second argument
|
|
19
|
+
# is a hash with variables that should be made available to the partial.
|
|
20
|
+
#
|
|
21
|
+
# @example
|
|
22
|
+
# partial(:header) # => partials/header.xhtml
|
|
23
|
+
# partial(:header, :username => "YorickPeterse")
|
|
24
|
+
#
|
|
25
|
+
# @author Yorick Peterse
|
|
26
|
+
# @since 0.2.5
|
|
27
|
+
# @param [Symbol] file The name of the partial to render.
|
|
28
|
+
# @param [Hash] variables A hash with variables that should be made available for
|
|
29
|
+
# the partial.
|
|
30
|
+
#
|
|
31
|
+
def partial(file, variables = {})
|
|
32
|
+
theme = ::Zen::Theme[::Zen::Settings[:theme]]
|
|
33
|
+
|
|
34
|
+
if !theme.respond_to?(:partial_dir) or theme.partial_dir.nil?
|
|
35
|
+
raise(::Zen::ThemeError, "The theme #{theme.name} has no partial directory set.")
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
template = "#{theme.partial_dir}/#{file}.xhtml"
|
|
39
|
+
|
|
40
|
+
if !File.exist?(template)
|
|
41
|
+
raise(::Zen::ThemeError, "The template #{template} doesn't exist.")
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
# All done captain!
|
|
45
|
+
render_file(template, variables)
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
##
|
|
49
|
+
# Renders the 404 template for the current theme (clearing the current buffer) and
|
|
50
|
+
# sets the HTTP response code to 404. Optionally you can pass a set of variables to
|
|
51
|
+
# the 404 template by setting this method's first argument to a hash.
|
|
52
|
+
#
|
|
53
|
+
# @example
|
|
54
|
+
# show_404
|
|
55
|
+
# show_404(:uri => @request_uri)
|
|
56
|
+
#
|
|
57
|
+
# @author Yorick Peterse
|
|
58
|
+
# @since 0.2.5
|
|
59
|
+
# @param [Hash] variables Hash with variables to pass to the 404 template.
|
|
60
|
+
#
|
|
61
|
+
def show_404(variables = {})
|
|
62
|
+
theme = ::Zen::Theme[::Zen::Settings[:theme]]
|
|
63
|
+
template = "#{theme.template_dir}/404.xhtml"
|
|
64
|
+
|
|
65
|
+
# Render the template and replace the current buffer with it's output
|
|
66
|
+
template = render_file(template, variables)
|
|
67
|
+
|
|
68
|
+
respond(template, 404)
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
end
|
data/lib/zen/language.rb
CHANGED
|
@@ -54,7 +54,9 @@ module Zen
|
|
|
54
54
|
# ## Options
|
|
55
55
|
#
|
|
56
56
|
# * language: Small string that defines the current language (e.g. "en").
|
|
57
|
-
# * paths: Array of paths to look for a language
|
|
57
|
+
# * paths: Array of paths to look for a language directory. Note that this should be
|
|
58
|
+
# the parent directory of the directory called "language", not the actual directory
|
|
59
|
+
# itself.
|
|
58
60
|
#
|
|
59
61
|
# @author Yorick Peterse
|
|
60
62
|
# @since 0.2
|
|
@@ -62,13 +64,17 @@ module Zen
|
|
|
62
64
|
module Language
|
|
63
65
|
include Ramaze::Optioned
|
|
64
66
|
|
|
67
|
+
##
|
|
68
|
+
# Hash containing all loaded translation files.
|
|
69
|
+
#
|
|
70
|
+
# @author Yorick Peterse
|
|
71
|
+
# @since 0.2.5
|
|
72
|
+
#
|
|
73
|
+
Registered = {}
|
|
74
|
+
|
|
65
75
|
options.dsl do
|
|
66
76
|
o 'Small string that defines the current language (e.g. "en").', :language, 'en'
|
|
67
|
-
o 'Array of paths to look for
|
|
68
|
-
end
|
|
69
|
-
|
|
70
|
-
class << self
|
|
71
|
-
attr_reader :translations
|
|
77
|
+
o 'Array of paths to look for the language files' , :paths , []
|
|
72
78
|
end
|
|
73
79
|
|
|
74
80
|
##
|
|
@@ -83,10 +89,9 @@ module Zen
|
|
|
83
89
|
# @param [String] lang_name The name of the language file to load.
|
|
84
90
|
#
|
|
85
91
|
def self.load(lang_name)
|
|
86
|
-
|
|
87
|
-
@translations[self.options.language.to_s] ||= {}
|
|
92
|
+
Registered[self.options.language.to_s] ||= {}
|
|
88
93
|
|
|
89
|
-
if
|
|
94
|
+
if Registered[self.options.language.to_s][lang_name.to_s]
|
|
90
95
|
return
|
|
91
96
|
end
|
|
92
97
|
|
|
@@ -101,8 +106,8 @@ module Zen
|
|
|
101
106
|
# would result in {'person.age' => 18}.
|
|
102
107
|
translation = self.to_dotted_hash({lang_name.to_s => translation})
|
|
103
108
|
|
|
104
|
-
|
|
105
|
-
|
|
109
|
+
Registered[self.options.language.to_s] ||= {}
|
|
110
|
+
Registered[self.options.language.to_s].merge!(translation)
|
|
106
111
|
|
|
107
112
|
# Prevents the exception from being raised
|
|
108
113
|
return
|
|
@@ -112,52 +117,6 @@ module Zen
|
|
|
112
117
|
raise(Zen::LanguageError, "No language file could be found for \"#{lang_name}\"")
|
|
113
118
|
end
|
|
114
119
|
|
|
115
|
-
##
|
|
116
|
-
# Method for retrieving the correct language item based on the given string.
|
|
117
|
-
# If you want to retrieve sub-items you can separate each level with a dot:
|
|
118
|
-
#
|
|
119
|
-
# lang('tutorial.main.sub')
|
|
120
|
-
#
|
|
121
|
-
# This would require our YAML file to look something like the following:
|
|
122
|
-
#
|
|
123
|
-
# ---
|
|
124
|
-
# main:
|
|
125
|
-
# sub: "Something!"
|
|
126
|
-
#
|
|
127
|
-
# It's important to remember that your key should always include the name of the
|
|
128
|
-
# language file since once a file is loaded it will be kept in memory to reduce
|
|
129
|
-
# disk usage.
|
|
130
|
-
#
|
|
131
|
-
# @example
|
|
132
|
-
# lang('username')
|
|
133
|
-
#
|
|
134
|
-
# @author Yorick Peterse
|
|
135
|
-
# @since 0.2
|
|
136
|
-
# @param [String] key The language key to select.
|
|
137
|
-
# @return [Mixed]
|
|
138
|
-
#
|
|
139
|
-
def lang(key)
|
|
140
|
-
lang = ::Zen::Language.options.language.to_s
|
|
141
|
-
groups = []
|
|
142
|
-
translations = ::Zen::Language.translations
|
|
143
|
-
|
|
144
|
-
if !translations or !translations.key?(lang)
|
|
145
|
-
raise(
|
|
146
|
-
Zen::LanguageError,
|
|
147
|
-
"No translation files have been added for the language code \"#{lang}\""
|
|
148
|
-
)
|
|
149
|
-
end
|
|
150
|
-
|
|
151
|
-
if translations[lang][key]
|
|
152
|
-
return translations[lang][key]
|
|
153
|
-
end
|
|
154
|
-
|
|
155
|
-
raise(
|
|
156
|
-
Zen::LanguageError,
|
|
157
|
-
"The specified language item \"#{key}\" does not exist"
|
|
158
|
-
)
|
|
159
|
-
end
|
|
160
|
-
|
|
161
120
|
private
|
|
162
121
|
|
|
163
122
|
##
|
|
@@ -218,5 +177,55 @@ module Zen
|
|
|
218
177
|
|
|
219
178
|
return target
|
|
220
179
|
end
|
|
180
|
+
|
|
181
|
+
#:nodoc:
|
|
182
|
+
module SingletonMethods
|
|
183
|
+
##
|
|
184
|
+
# Method for retrieving the correct language item based on the given string.
|
|
185
|
+
# If you want to retrieve sub-items you can separate each level with a dot:
|
|
186
|
+
#
|
|
187
|
+
# lang('tutorial.main.sub')
|
|
188
|
+
#
|
|
189
|
+
# This would require our YAML file to look something like the following:
|
|
190
|
+
#
|
|
191
|
+
# ---
|
|
192
|
+
# main:
|
|
193
|
+
# sub: "Something!"
|
|
194
|
+
#
|
|
195
|
+
# It's important to remember that your key should always include the name of the
|
|
196
|
+
# language file since once a file is loaded it will be kept in memory to reduce
|
|
197
|
+
# disk usage.
|
|
198
|
+
#
|
|
199
|
+
# @example
|
|
200
|
+
# lang('username')
|
|
201
|
+
#
|
|
202
|
+
# @author Yorick Peterse
|
|
203
|
+
# @since 0.2
|
|
204
|
+
# @param [String] key The language key to select.
|
|
205
|
+
# @return [Mixed]
|
|
206
|
+
#
|
|
207
|
+
def lang(key)
|
|
208
|
+
lang = ::Zen::Language.options.language.to_s
|
|
209
|
+
groups = []
|
|
210
|
+
translations = ::Zen::Language::Registered
|
|
211
|
+
|
|
212
|
+
if !translations or !translations.key?(lang)
|
|
213
|
+
raise(
|
|
214
|
+
Zen::LanguageError,
|
|
215
|
+
"No translation files have been added for the language code \"#{lang}\""
|
|
216
|
+
)
|
|
217
|
+
end
|
|
218
|
+
|
|
219
|
+
if translations[lang][key]
|
|
220
|
+
return translations[lang][key]
|
|
221
|
+
end
|
|
222
|
+
|
|
223
|
+
raise(
|
|
224
|
+
Zen::LanguageError,
|
|
225
|
+
"The specified language item \"#{key}\" does not exist"
|
|
226
|
+
)
|
|
227
|
+
end
|
|
228
|
+
end
|
|
229
|
+
|
|
221
230
|
end
|
|
222
231
|
end
|
data/lib/zen/layout/admin.xhtml
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
<!DOCTYPE html>
|
|
2
|
-
<html lang="#{
|
|
2
|
+
<html lang="#{::Zen::Settings[:language]}">
|
|
3
3
|
<head>
|
|
4
4
|
<meta charset="utf-8" />
|
|
5
5
|
|
|
6
6
|
<!-- Load all stylesheets -->
|
|
7
|
-
|
|
7
|
+
#{::Zen::Asset.build(:stylesheet)}
|
|
8
8
|
|
|
9
9
|
<title>#{@page_title}</title>
|
|
10
10
|
</head>
|
|
@@ -17,10 +17,7 @@
|
|
|
17
17
|
doesn't have the required permissions for the extension that created it.
|
|
18
18
|
-->
|
|
19
19
|
<nav id="main_nav" class="grid_12">
|
|
20
|
-
#{
|
|
21
|
-
perms = extension_permissions
|
|
22
|
-
Zen::Package.build_menu("left", perms[0], perms[1])
|
|
23
|
-
}
|
|
20
|
+
#{Zen::Package.build_menu("left", extension_permissions)}
|
|
24
21
|
|
|
25
22
|
<ul class="right clearfix">
|
|
26
23
|
<li>
|
|
@@ -43,47 +40,7 @@
|
|
|
43
40
|
</header>
|
|
44
41
|
</div>
|
|
45
42
|
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
are no silly sidebars.
|
|
49
|
-
-->
|
|
50
|
-
<div id="container" class="container">
|
|
51
|
-
<div id="content" class="grid_12">
|
|
52
|
-
#{@content}
|
|
53
|
-
</div>
|
|
54
|
-
</div>
|
|
55
|
-
|
|
56
|
-
<footer id="main_footer" class="container">
|
|
57
|
-
<div class="grid_12">
|
|
58
|
-
<p>#{lang('zen_general.labels.zen_version') % Zen::Version}</p>
|
|
59
|
-
<ul class="clearfix">
|
|
60
|
-
<li>
|
|
61
|
-
<a href="http://zen-cms.com/">
|
|
62
|
-
#{lang('zen_general.labels.zen_website')}
|
|
63
|
-
</a>
|
|
64
|
-
</li>
|
|
65
|
-
<li>
|
|
66
|
-
<a href="http://zen-cms.com/documentation">
|
|
67
|
-
#{lang('zen_general.labels.zen_docs')}
|
|
68
|
-
</a>
|
|
69
|
-
</li>
|
|
70
|
-
<li>
|
|
71
|
-
<a href="https://github.com/zen-cms/">
|
|
72
|
-
#{lang('zen_general.labels.zen_github')}
|
|
73
|
-
</a>
|
|
74
|
-
</li>
|
|
75
|
-
</ul>
|
|
76
|
-
</div>
|
|
77
|
-
</footer>
|
|
78
|
-
|
|
79
|
-
<script src="/admin/js/mootools/core.js"></script>
|
|
80
|
-
<script src="/admin/js/mootools/more.js"></script>
|
|
81
|
-
|
|
82
|
-
<script>
|
|
83
|
-
Zen = {};
|
|
84
|
-
Zen.Flash = #{flash.combined.to_json};
|
|
85
|
-
</script>
|
|
86
|
-
|
|
87
|
-
#{build_js}
|
|
43
|
+
#{render_file(__DIR__('../view/main.xhtml'))}
|
|
44
|
+
#{render_file(__DIR__('../view/bottom.xhtml'))}
|
|
88
45
|
</body>
|
|
89
46
|
</html>
|
data/lib/zen/layout/login.xhtml
CHANGED
|
@@ -1,56 +1,16 @@
|
|
|
1
1
|
<!DOCTYPE html>
|
|
2
|
-
<html lang="#{
|
|
2
|
+
<html lang="#{::Zen::Settings[:language]}">
|
|
3
3
|
<head>
|
|
4
4
|
<meta charset="utf-8" />
|
|
5
5
|
|
|
6
6
|
<!-- Load all stylesheets -->
|
|
7
|
-
#{
|
|
7
|
+
#{::Zen::Asset.build(:stylesheet)}
|
|
8
8
|
|
|
9
9
|
<title>#{@page_title}</title>
|
|
10
10
|
</head>
|
|
11
11
|
|
|
12
12
|
<body id="login">
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
are no silly sidebars.
|
|
16
|
-
-->
|
|
17
|
-
<div id="container" class="container">
|
|
18
|
-
<div id="content" class="grid_12">
|
|
19
|
-
#{@content}
|
|
20
|
-
</div>
|
|
21
|
-
</div>
|
|
22
|
-
|
|
23
|
-
<footer id="main_footer" class="container">
|
|
24
|
-
<div class="grid_12">
|
|
25
|
-
<p>#{lang('zen_general.labels.zen_version') % Zen::Version}</p>
|
|
26
|
-
<ul class="clearfix">
|
|
27
|
-
<li>
|
|
28
|
-
<a href="http://zen-cms.com/">
|
|
29
|
-
#{lang('zen_general.labels.zen_website')}
|
|
30
|
-
</a>
|
|
31
|
-
</li>
|
|
32
|
-
<li>
|
|
33
|
-
<a href="http://zen-cms.com/documentation">
|
|
34
|
-
#{lang('zen_general.labels.zen_docs')}
|
|
35
|
-
</a>
|
|
36
|
-
</li>
|
|
37
|
-
<li>
|
|
38
|
-
<a href="https://github.com/zen-cms/">
|
|
39
|
-
#{lang('zen_general.labels.zen_github')}
|
|
40
|
-
</a>
|
|
41
|
-
</li>
|
|
42
|
-
</ul>
|
|
43
|
-
</div>
|
|
44
|
-
</footer>
|
|
45
|
-
|
|
46
|
-
<script src="/admin/js/mootools/core.js"></script>
|
|
47
|
-
<script src="/admin/js/mootools/more.js"></script>
|
|
48
|
-
|
|
49
|
-
<script>
|
|
50
|
-
Zen = {};
|
|
51
|
-
Zen.Flash = #{flash.combined.to_json};
|
|
52
|
-
</script>
|
|
53
|
-
|
|
54
|
-
#{build_js}
|
|
13
|
+
#{render_file(__DIR__('../view/main.xhtml'))}
|
|
14
|
+
#{render_file(__DIR__('../view/bottom.xhtml'))}
|
|
55
15
|
</body>
|
|
56
16
|
</html>
|
data/lib/zen/model/methods.rb
CHANGED
|
@@ -9,7 +9,7 @@ module Sequel
|
|
|
9
9
|
# elements using the BlueForm helper.
|
|
10
10
|
#
|
|
11
11
|
# @example
|
|
12
|
-
# Sections::
|
|
12
|
+
# Sections::Model::Section.pk_hash(:name) # => {1 => 'Blog', 2 => 'General'}
|
|
13
13
|
#
|
|
14
14
|
# @author Yorick Peterse
|
|
15
15
|
# @param [Symbol] column The name of the optional column to select.
|
data/lib/zen/model/settings.rb
CHANGED
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
include Zen::Language
|
|
2
|
-
|
|
3
1
|
Zen::Language.load('zen_models')
|
|
4
2
|
|
|
5
3
|
# When passing a hash to update() or create() we'll ignore any keys that don't belong
|
|
@@ -10,7 +8,6 @@ Sequel::Model.strict_param_setting = false
|
|
|
10
8
|
# Load all the required plugins
|
|
11
9
|
Sequel::Model.plugin :validation_helpers
|
|
12
10
|
Sequel::Model.plugin :association_pks
|
|
13
|
-
Sequel::Model.plugin :schema
|
|
14
11
|
|
|
15
12
|
Sequel::Plugins::ValidationHelpers::DEFAULT_OPTIONS.merge!(
|
|
16
13
|
{
|
data/lib/zen/package.rb
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
require 'ramaze/gestalt'
|
|
2
|
-
require __DIR__('helper/acl')
|
|
3
|
-
require __DIR__('liquid/controller_behavior')
|
|
4
2
|
require __DIR__('error/package_error')
|
|
3
|
+
require __DIR__('package/base')
|
|
5
4
|
|
|
6
5
|
#:nodoc:
|
|
7
6
|
module Zen
|
|
@@ -20,16 +19,29 @@ module Zen
|
|
|
20
19
|
#
|
|
21
20
|
# When using this block you're required to set the following attributes:
|
|
22
21
|
#
|
|
23
|
-
# * name: the name of the package
|
|
24
|
-
# * author: the name of the person who made the package
|
|
25
|
-
# * about: a small description of the package
|
|
26
|
-
# * url: the URL to the package's website
|
|
27
|
-
# *
|
|
28
|
-
# extensions and com.AUTHOR.themes.NAME for themes.
|
|
29
|
-
# * directory: the root directory of the package, set this using __DIR__('path')
|
|
22
|
+
# * name: the name of the package in lowercased letters and/or numbers.
|
|
23
|
+
# * author: the name of the person who made the package.
|
|
24
|
+
# * about: a small description of the package.
|
|
25
|
+
# * url: the URL to the package's website.
|
|
26
|
+
# * directory: the root directory of the package, set this using __DIR__('path').
|
|
30
27
|
#
|
|
31
28
|
# Optionally you can also specify the attribute "menu" (more on that later).
|
|
32
29
|
#
|
|
30
|
+
# ## ACL
|
|
31
|
+
#
|
|
32
|
+
# Packages allow developers to register controllers for the ACL system that ships with
|
|
33
|
+
# Zen. Doing this means a user can set controller specific rules in the backend without
|
|
34
|
+
# having to write any code. In order to register a set of controllers you'll need to
|
|
35
|
+
# set the "controllers" attribute in the package block to a hash. The keys of this hash
|
|
36
|
+
# should be a human readable name of the controller and the values the full namespace
|
|
37
|
+
# of the controller as either a string or a constants:
|
|
38
|
+
#
|
|
39
|
+
# Zen::Package.add do |pkg|
|
|
40
|
+
# pkg.controllers = {
|
|
41
|
+
# 'Test Controller' => Test::Controller::TestController
|
|
42
|
+
# }
|
|
43
|
+
# end
|
|
44
|
+
#
|
|
33
45
|
# ## Menu Items
|
|
34
46
|
#
|
|
35
47
|
# The package system easily allows modules to add navigation/sub-navigation elements
|
|
@@ -60,41 +72,43 @@ module Zen
|
|
|
60
72
|
#
|
|
61
73
|
# If your package uses it's own database tables it's best to use migrations as these make
|
|
62
74
|
# it very easy to install/uninstall the extension. Migrations should be put in the root
|
|
63
|
-
# directory of your extension. For example, if your extension is in "foobar" the
|
|
64
|
-
# should be located in "foobar/migrations", the lib directory in "foobar/lib",
|
|
75
|
+
# directory of your extension. For example, if your extension is in "foobar" the
|
|
76
|
+
# migrations should be located in "foobar/migrations", the lib directory in "foobar/lib",
|
|
77
|
+
# etc.
|
|
65
78
|
#
|
|
66
79
|
# Migrations can be executed using the Thor task "package:migrate" or "db:migrate",
|
|
67
80
|
# the latter will install all packages while the first one will only install the
|
|
68
81
|
# specified packages. For more information on these tasks execute the following command:
|
|
69
82
|
#
|
|
70
|
-
# $
|
|
71
|
-
#
|
|
72
|
-
# ## Identifiers
|
|
73
|
-
#
|
|
74
|
-
# Package identifiers should always have the following format:
|
|
75
|
-
#
|
|
76
|
-
# com.VENDOR.NAME
|
|
77
|
-
#
|
|
78
|
-
# For example:
|
|
79
|
-
#
|
|
80
|
-
# com.zen.sections
|
|
83
|
+
# $ rake -T
|
|
81
84
|
#
|
|
82
85
|
# @author Yorick Peterse
|
|
83
86
|
# @since 0.1
|
|
84
|
-
# @attr_reader [Array] packages Array containing the instances of all packages.
|
|
85
87
|
#
|
|
86
88
|
module Package
|
|
87
|
-
class << self
|
|
88
|
-
attr_reader :packages
|
|
89
|
-
end
|
|
90
|
-
|
|
91
89
|
##
|
|
92
|
-
#
|
|
93
|
-
#
|
|
94
|
-
#
|
|
90
|
+
# Hash containing all the registered packages. The keys of this hash are the names
|
|
91
|
+
# of all packages and the values the instances of Zen::Package::Base.
|
|
92
|
+
#
|
|
93
|
+
# @author Yorick Peterse
|
|
94
|
+
# @since 0.2.5
|
|
95
|
+
#
|
|
96
|
+
Registered = {}
|
|
97
|
+
|
|
98
|
+
##
|
|
99
|
+
# Array containing all controllers of all packages.
|
|
100
|
+
#
|
|
101
|
+
# @author Yorick Peterse
|
|
102
|
+
# @since 0.2.5
|
|
103
|
+
#
|
|
104
|
+
Controllers = []
|
|
105
|
+
|
|
106
|
+
##
|
|
107
|
+
# Adds a new package along with all it's details such as the name, author, version
|
|
108
|
+
# and so on. Extensions can be added using a simple block as following:
|
|
95
109
|
#
|
|
96
110
|
# Zen::Package.add do |ext|
|
|
97
|
-
# ext.name = "
|
|
111
|
+
# ext.name = "name"
|
|
98
112
|
# ext.author = "Author"
|
|
99
113
|
# end
|
|
100
114
|
#
|
|
@@ -105,7 +119,6 @@ module Zen
|
|
|
105
119
|
# * version
|
|
106
120
|
# * about
|
|
107
121
|
# * url
|
|
108
|
-
# * identifier
|
|
109
122
|
# * directory
|
|
110
123
|
#
|
|
111
124
|
# You can also set "migration_dir" to a directory with all migrations. By default
|
|
@@ -116,17 +129,13 @@ module Zen
|
|
|
116
129
|
# @yield [package] Object containing all setters and getters for each package.
|
|
117
130
|
#
|
|
118
131
|
def self.add
|
|
119
|
-
package = Zen::
|
|
120
|
-
:name, :author, :about, :url, :identifier, :directory, :menu, :migration_dir
|
|
121
|
-
).new
|
|
122
|
-
|
|
123
|
-
required = [:name, :author, :about, :identifier, :directory]
|
|
132
|
+
package = Zen::Package::Base.new
|
|
124
133
|
|
|
125
134
|
yield package
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
135
|
+
|
|
136
|
+
# Validate the package
|
|
137
|
+
package.validate
|
|
138
|
+
package.name = package.name.to_sym
|
|
130
139
|
|
|
131
140
|
# Update the root but prevent duplicates
|
|
132
141
|
if !Ramaze.options.roots.include?(package.directory)
|
|
@@ -138,31 +147,37 @@ module Zen
|
|
|
138
147
|
Zen::Language.options.paths.push(package.directory)
|
|
139
148
|
end
|
|
140
149
|
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
end
|
|
150
|
+
package.controllers.each do |name, controller|
|
|
151
|
+
controller = controller.to_s
|
|
152
|
+
|
|
153
|
+
if !Controllers.include?(controller)
|
|
154
|
+
Controllers.push(controller)
|
|
147
155
|
end
|
|
148
156
|
end
|
|
149
157
|
|
|
150
|
-
|
|
151
|
-
@packages[package.identifier.to_s] = package
|
|
158
|
+
Registered[package.name.to_sym] = package
|
|
152
159
|
end
|
|
153
|
-
|
|
160
|
+
|
|
154
161
|
##
|
|
155
|
-
#
|
|
156
|
-
# given extension identifier.
|
|
162
|
+
# Retrieves the package for the given name.
|
|
157
163
|
#
|
|
158
164
|
# @author Yorick Peterse
|
|
159
|
-
# @
|
|
160
|
-
# @return [Object]
|
|
165
|
+
# @since 0.1
|
|
161
166
|
#
|
|
162
|
-
def self.[](
|
|
163
|
-
|
|
167
|
+
def self.[](name)
|
|
168
|
+
name = name.to_sym
|
|
169
|
+
|
|
170
|
+
if Registered.empty?
|
|
171
|
+
raise(PackageError, "No packages have been added yet.")
|
|
172
|
+
end
|
|
173
|
+
|
|
174
|
+
if !Registered.key?(name)
|
|
175
|
+
raise(PackageError, "The package \"#{name}\" doesn't exist.")
|
|
176
|
+
end
|
|
177
|
+
|
|
178
|
+
return Registered[name]
|
|
164
179
|
end
|
|
165
|
-
|
|
180
|
+
|
|
166
181
|
##
|
|
167
182
|
# Builds a navigation menu for all installed extensions.
|
|
168
183
|
# Extensions can have an infinite amount of sub-navigation
|
|
@@ -170,32 +185,21 @@ module Zen
|
|
|
170
185
|
# of which each list item can contain N sub items.
|
|
171
186
|
#
|
|
172
187
|
# @author Yorick Peterse
|
|
173
|
-
# @param [String]
|
|
174
|
-
# @param [Hash]
|
|
175
|
-
# Ramaze::Helper::ACL
|
|
176
|
-
# @param [Boolean] all When set to true all elements will be displayed opposed to
|
|
177
|
-
# only those the user is allowed to see.
|
|
188
|
+
# @param [String] css_class A string of CSS classes to apply to the main UL element.
|
|
189
|
+
# @param [Hash] permissions Hash containing the permissions as returned by
|
|
190
|
+
# Ramaze::Helper::ACL.extension_permissions
|
|
178
191
|
# @since 0.1
|
|
179
192
|
#
|
|
180
|
-
def self.build_menu(css_class = '', permissions = {}
|
|
181
|
-
@g
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
# Build a list of all allowed extensions
|
|
186
|
-
permissions.each do |ident, rules|
|
|
187
|
-
if rules.include?(:read)
|
|
188
|
-
identifiers.push(ident)
|
|
189
|
-
end
|
|
190
|
-
end
|
|
193
|
+
def self.build_menu(css_class = '', permissions = {})
|
|
194
|
+
@g = Ramaze::Gestalt.new
|
|
195
|
+
@permissions = permissions
|
|
196
|
+
menu_items = []
|
|
191
197
|
|
|
192
|
-
|
|
198
|
+
Registered.each do |name, pkg|
|
|
193
199
|
# Got a menu for us?
|
|
194
|
-
if !
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
menu_items.push(m)
|
|
198
|
-
end
|
|
200
|
+
if !pkg.menu.nil?
|
|
201
|
+
pkg.menu.each do |m|
|
|
202
|
+
menu_items.push(m)
|
|
199
203
|
end
|
|
200
204
|
end
|
|
201
205
|
end
|
|
@@ -226,12 +230,26 @@ module Zen
|
|
|
226
230
|
# @param [Hash] menu Hash containing the navigation items (url, title, etc)
|
|
227
231
|
# @since 0.1
|
|
228
232
|
#
|
|
229
|
-
def self.nav_list
|
|
233
|
+
def self.nav_list(menu)
|
|
234
|
+
if menu[:url][0] != '/'
|
|
235
|
+
menu[:url] = '/' + menu[:url]
|
|
236
|
+
end
|
|
237
|
+
|
|
238
|
+
# Get the controller for the current item
|
|
239
|
+
controller = Ramaze::AppMap.at('/').url_map.at(menu[:url]).to_s
|
|
240
|
+
read_access = @permissions[controller].include?(:read)
|
|
241
|
+
|
|
242
|
+
# Ignore the menu item alltogether
|
|
243
|
+
if !read_access and !menu.key?(:children)
|
|
244
|
+
return
|
|
245
|
+
end
|
|
246
|
+
|
|
230
247
|
@g.li do
|
|
231
|
-
|
|
232
|
-
|
|
248
|
+
# Easy way of disabling an item and not fucking up the menu
|
|
249
|
+
if !read_access
|
|
250
|
+
menu[:url] = '#'
|
|
233
251
|
end
|
|
234
|
-
|
|
252
|
+
|
|
235
253
|
@g.a :href => menu[:url], :title => menu[:title] do
|
|
236
254
|
menu[:title]
|
|
237
255
|
end
|