zen 0.2.4.1 → 0.2.5
Sign up to get free protection for your applications and to get access to all the features.
- 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/asset.rb
ADDED
@@ -0,0 +1,258 @@
|
|
1
|
+
require 'ramaze/gestalt'
|
2
|
+
|
3
|
+
#:nodoc:
|
4
|
+
module Zen
|
5
|
+
##
|
6
|
+
# The Asset module is a module used to register what Javascript files and stylesheets
|
7
|
+
# should be loaded for the current request. This can be very useful if you want to add
|
8
|
+
# a widget to all pages or override a certain stylesheet.
|
9
|
+
#
|
10
|
+
# ## Adding Assets
|
11
|
+
#
|
12
|
+
# Assets can be added by calling either Zen::Asset.stylesheet or Zen::Asset.javascript.
|
13
|
+
# Both take an array of files and a hash with some configuration options, for more info
|
14
|
+
# on the exact usage and all the available parameters see the individual methods. Here
|
15
|
+
# are a few quick examples of loading files:
|
16
|
+
#
|
17
|
+
# # Load 3 Javascript files of which 2 will be loaded globally
|
18
|
+
# Zen::Asset.javascript(
|
19
|
+
# ['mootools/core', 'mootools/more'], :global => true,
|
20
|
+
# )
|
21
|
+
#
|
22
|
+
# Zen::Asset.javascript(['application'], :controller => self)
|
23
|
+
#
|
24
|
+
# # Do the same with a few stylesheets
|
25
|
+
# Zen::Asset.stylesheet(['admin/css/forms'], :global => true)
|
26
|
+
# Zen::Asset.stylesheet(['style'], :controller => self)
|
27
|
+
#
|
28
|
+
# ## Customizing Options
|
29
|
+
#
|
30
|
+
# This module uses Innate::Optioned to provide a few options that can be changed. The
|
31
|
+
# following options are available:
|
32
|
+
#
|
33
|
+
# * prefix: The global prefix to use for all assets, set to "admin" by default.
|
34
|
+
# * javascript_prefix: The prefix to use for all Javascript files on top of the global
|
35
|
+
# prefix.
|
36
|
+
# * stylesheet_prefix: Similar to the javascript_prefix option but for stylesheets.
|
37
|
+
#
|
38
|
+
# ## Building Assets
|
39
|
+
#
|
40
|
+
# Building assets shouldn't be required as Zen already does this but if you happen to
|
41
|
+
# need it you can build the files as following:
|
42
|
+
#
|
43
|
+
# Zen::Asset.build(:stylesheet)
|
44
|
+
# Zen::Asset.build(:javascript)
|
45
|
+
#
|
46
|
+
# ## Controller Usage
|
47
|
+
#
|
48
|
+
# While this module can be called by any other piece of code the class
|
49
|
+
# Zen::Controller::AdminController provides shortcuts to Zen::Asset.javascript and
|
50
|
+
# Zen::Asset.stylesheet. These shortcuts work identical but are defined as class methods
|
51
|
+
# and thus can be used inside your class declaration:
|
52
|
+
#
|
53
|
+
# class Something < Zen::Controller::AdminController
|
54
|
+
# stylesheet ['reset'], :global => true
|
55
|
+
# end
|
56
|
+
#
|
57
|
+
# @author Yorick Peterse
|
58
|
+
# @since 0.2.5
|
59
|
+
#
|
60
|
+
module Asset
|
61
|
+
include ::Innate::Optioned
|
62
|
+
|
63
|
+
class << self
|
64
|
+
include ::Innate::Trinity
|
65
|
+
end
|
66
|
+
|
67
|
+
options.dsl do
|
68
|
+
o 'Prefix for both Javascript files and stylesheets', :prefix , 'admin'
|
69
|
+
o 'Prefix for Javascript files on top of :prefix' , :javascript_prefix, 'js'
|
70
|
+
o 'Prefix for stylesheets on top of :prefix' , :stylesheet_prefix, 'css'
|
71
|
+
end
|
72
|
+
|
73
|
+
##
|
74
|
+
# Hash containing all the global and controller specific stylesheets that have to be
|
75
|
+
# loaded when calling build_stylesheets.
|
76
|
+
#
|
77
|
+
# @author Yorick Peterse
|
78
|
+
# @since 0.2.5
|
79
|
+
#
|
80
|
+
Stylesheets = {
|
81
|
+
:global => []
|
82
|
+
}
|
83
|
+
|
84
|
+
##
|
85
|
+
# Hash containing all the global and controller specific stylesheets to load when
|
86
|
+
# calling build_javascripts.
|
87
|
+
#
|
88
|
+
# @author Yorick Peterse
|
89
|
+
# @since 0.2.5
|
90
|
+
#
|
91
|
+
Javascripts = {
|
92
|
+
:global => []
|
93
|
+
}
|
94
|
+
|
95
|
+
##
|
96
|
+
# Registers the given Javascripts files so that they're either loaded for the
|
97
|
+
# current action or for all actions. Note that the first argument of this method
|
98
|
+
# should always be an array.
|
99
|
+
#
|
100
|
+
# @example
|
101
|
+
# # Loads /admin/js/users/access_rules.js for the current action only
|
102
|
+
# Zen::Asset.javascript ['users/access_rules']
|
103
|
+
#
|
104
|
+
# # This would load the file globally
|
105
|
+
# Zen::Asset.javascript ['users/access_rules'], :global => true
|
106
|
+
#
|
107
|
+
# @author Yorick Peterse
|
108
|
+
# @since 0.2.5
|
109
|
+
# @param [Array] files An array of Javascript files (without their extensions) to
|
110
|
+
# load relatively to the root of the application (/).
|
111
|
+
# @param [Hash] options A hash containing additional options.
|
112
|
+
# @option options [TrueClass] :global When set to true the specified files will be
|
113
|
+
# loaded globally rather than just for the current action.
|
114
|
+
# @option options [String/Symbol] controller The name of the controller for which
|
115
|
+
# the specified files should be loaded.
|
116
|
+
#
|
117
|
+
def self.javascript(files, options = {})
|
118
|
+
options = {
|
119
|
+
:prefix => File.join('/', self.options.prefix, self.options.javascript_prefix),
|
120
|
+
:type => :javascript
|
121
|
+
}.merge(options)
|
122
|
+
|
123
|
+
process(files, options)
|
124
|
+
end
|
125
|
+
|
126
|
+
##
|
127
|
+
# Registers a number of stylesheets that can either be loaded globally or for the
|
128
|
+
# current action.
|
129
|
+
#
|
130
|
+
# @example
|
131
|
+
# Zen::Asset.stylesheet ['foobar/admin_template'], :global => true
|
132
|
+
#
|
133
|
+
# @author Yorick Peterse
|
134
|
+
# @since 0.2.5
|
135
|
+
# @param [Array] files A list of stylesheets (without their extensions) to load.
|
136
|
+
# @param [Hash] options A hash containing additional options to use.
|
137
|
+
# @option options [TrueClass] :global When set to true all the specified stylesheets
|
138
|
+
# will be loaded globally rather than just for the current action.
|
139
|
+
# @option options [String/Symbol] controller The name of the controller for which
|
140
|
+
# the specified files should be loaded.
|
141
|
+
#
|
142
|
+
def self.stylesheet(files, options = {})
|
143
|
+
options = {
|
144
|
+
:prefix => File.join('/', self.options.prefix, self.options.stylesheet_prefix),
|
145
|
+
:type => :stylesheet
|
146
|
+
}.merge(options)
|
147
|
+
|
148
|
+
process(files, options)
|
149
|
+
end
|
150
|
+
|
151
|
+
##
|
152
|
+
# Builds either all Javascript files or stylesheets. This method will load both the
|
153
|
+
# global and action specific files.
|
154
|
+
#
|
155
|
+
# @example
|
156
|
+
# # Build the HTML tags for all stylesheets
|
157
|
+
# Zen::Asset.build(:stylesheet)
|
158
|
+
#
|
159
|
+
# # Build the HTML tags for all Javascript files
|
160
|
+
# Zen::Asset.build(:javascript)
|
161
|
+
#
|
162
|
+
# @author Yorick Peterse
|
163
|
+
# @since 0.2.5
|
164
|
+
# @param [Symbol] type The type of assets to build.
|
165
|
+
# @return [String] The HTML tags for all the assets.
|
166
|
+
#
|
167
|
+
def self.build(type)
|
168
|
+
type = type.to_sym
|
169
|
+
attrs = {}
|
170
|
+
controller = action.node.to_s.to_sym
|
171
|
+
gestalt = Ramaze::Gestalt.new
|
172
|
+
|
173
|
+
# Set the basic elements of the tag
|
174
|
+
if type === :stylesheet
|
175
|
+
tag = :link
|
176
|
+
value = :href
|
177
|
+
attrs[:rel] = 'stylesheet'
|
178
|
+
files = Stylesheets
|
179
|
+
else
|
180
|
+
tag = :script
|
181
|
+
value = :src
|
182
|
+
files = Javascripts
|
183
|
+
end
|
184
|
+
|
185
|
+
# Get all the files to build
|
186
|
+
if !files[controller].nil?
|
187
|
+
files = files[:global] + files[controller]
|
188
|
+
else
|
189
|
+
files = files[:global]
|
190
|
+
end
|
191
|
+
|
192
|
+
# Build the tags
|
193
|
+
files.each do |f|
|
194
|
+
tag_attrs = {
|
195
|
+
value => f
|
196
|
+
}.merge(attrs)
|
197
|
+
|
198
|
+
if type === :javascript
|
199
|
+
gestalt.send(tag, '', tag_attrs)
|
200
|
+
else
|
201
|
+
gestalt.send(tag, tag_attrs)
|
202
|
+
end
|
203
|
+
end
|
204
|
+
|
205
|
+
return gestalt.to_s
|
206
|
+
end
|
207
|
+
|
208
|
+
private
|
209
|
+
|
210
|
+
##
|
211
|
+
# Stores the given files in the correct hash based on the specified options.
|
212
|
+
#
|
213
|
+
# @example
|
214
|
+
# process(['foobar', 'baz'], :global => false, :type => :javascript, :prefix => 'js')
|
215
|
+
#
|
216
|
+
# @author Yorick Peterse
|
217
|
+
# @since 0.2.5
|
218
|
+
# @param [Array] files An array of files to load.
|
219
|
+
# @param [Hash] options A hash containing all the required options.
|
220
|
+
# @option options [TrueClass] :global Specifies that all the files should be loaded
|
221
|
+
# globally.
|
222
|
+
# @option options [Symbol] :type The type of asset that's loaded, can either be
|
223
|
+
# :javascript or :stylesheet.
|
224
|
+
# @option options [String] :prefix The prefix to use for all the assets.
|
225
|
+
# @option options [TrueClass] :global
|
226
|
+
# @option options [Symbol/String] :controller
|
227
|
+
#
|
228
|
+
def self.process(files, options)
|
229
|
+
# Determine whether the files should be loaded globally
|
230
|
+
if options.key?(:global) and options[:global] === true
|
231
|
+
key = :global
|
232
|
+
else
|
233
|
+
key = options[:controller].to_s.to_sym
|
234
|
+
end
|
235
|
+
|
236
|
+
# Determine where to save the data
|
237
|
+
if options[:type] === :javascript
|
238
|
+
save = Javascripts
|
239
|
+
ext = '.js'
|
240
|
+
else
|
241
|
+
save = Stylesheets
|
242
|
+
ext = '.css'
|
243
|
+
end
|
244
|
+
|
245
|
+
# Add all the files
|
246
|
+
files.each do |f|
|
247
|
+
f = f.to_s + ext
|
248
|
+
f = File.join(options[:prefix], f)
|
249
|
+
save[key] ||= []
|
250
|
+
|
251
|
+
if !save[key].include?(f)
|
252
|
+
save[key].push(f)
|
253
|
+
end
|
254
|
+
end
|
255
|
+
end
|
256
|
+
|
257
|
+
end
|
258
|
+
end
|
data/lib/zen/bin/app.rb
ADDED
@@ -0,0 +1,42 @@
|
|
1
|
+
require 'fileutils'
|
2
|
+
|
3
|
+
##
|
4
|
+
# Command that can be used to generate a new application.
|
5
|
+
#
|
6
|
+
# @author Yorick Peterse
|
7
|
+
# @since 0.2.5
|
8
|
+
#
|
9
|
+
command :app do |cmd|
|
10
|
+
|
11
|
+
# Set a few details of the command
|
12
|
+
cmd.syntax = '$ zen app [NAME]'
|
13
|
+
cmd.description = 'Creates a new application powered by Zen.'
|
14
|
+
|
15
|
+
cmd.option('-f', TrueClass, 'Overwrites any existing application.')
|
16
|
+
|
17
|
+
# The action to execute when the command is invoked
|
18
|
+
cmd.action do |args, opts|
|
19
|
+
if args.empty?
|
20
|
+
abort 'You need to specify a name for the application.'
|
21
|
+
end
|
22
|
+
|
23
|
+
name = args[0]
|
24
|
+
app = File.join('./', name)
|
25
|
+
proto = File.expand_path('../../../../proto/app', __FILE__)
|
26
|
+
|
27
|
+
if File.directory?(app) and !opts.f
|
28
|
+
abort "The application #{app} alread exists, use -f to overwrite it."
|
29
|
+
else
|
30
|
+
FileUtils.rm_rf(app)
|
31
|
+
end
|
32
|
+
|
33
|
+
# Copy the prototype
|
34
|
+
begin
|
35
|
+
FileUtils.cp_r(proto, app)
|
36
|
+
puts "The application has been generated and saved in #{app}"
|
37
|
+
rescue => e
|
38
|
+
abort "Failed to generate the application: #{e.message}"
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
end
|
@@ -1,7 +1,7 @@
|
|
1
1
|
#:nodoc:
|
2
2
|
module Zen
|
3
3
|
#:nodoc:
|
4
|
-
module
|
4
|
+
module Controller
|
5
5
|
##
|
6
6
|
# The admin controller is a base controller that should be extended by all controllers
|
7
7
|
# for the backend of Zen. This controller will automatically check to see if the
|
@@ -15,26 +15,14 @@ module Zen
|
|
15
15
|
# Users controller, mapped to /admin/users/login. If a user isn't logged in he/she
|
16
16
|
# will be redirected to the login page.
|
17
17
|
#
|
18
|
-
# ## Helpers
|
19
|
-
#
|
20
|
-
# The admin controller loads the following helpers:
|
21
|
-
#
|
22
|
-
# * CSRF
|
23
|
-
# * BlueForm
|
24
|
-
# * Common
|
25
|
-
# * Breadcrumb
|
26
|
-
# * User
|
27
|
-
# * ACL
|
28
|
-
# * Asset
|
29
|
-
#
|
30
18
|
# @author Yorick Peterse
|
31
19
|
# @since 0.1
|
32
20
|
#
|
33
|
-
class AdminController < Zen::
|
21
|
+
class AdminController < Zen::Controller::BaseController
|
34
22
|
layout :admin
|
35
23
|
engine :etanni
|
36
|
-
helper :blue_form, :common, :breadcrumb, :user, :acl
|
37
|
-
|
24
|
+
helper :blue_form, :common, :breadcrumb, :user, :acl
|
25
|
+
|
38
26
|
##
|
39
27
|
# The initialize method is called upon class initalization and is used to process several
|
40
28
|
# items before loading the controller(s) for the current extension.
|
@@ -44,37 +32,66 @@ module Zen
|
|
44
32
|
#
|
45
33
|
def initialize
|
46
34
|
super
|
47
|
-
|
48
|
-
# Load our CSS and Javascript files
|
49
|
-
require_css(
|
50
|
-
'boilerplate', 'grid', 'layout', 'general', 'forms', 'tables', 'buttons',
|
51
|
-
'tabs', 'notifications', 'editor'
|
52
|
-
)
|
53
|
-
|
54
|
-
require_js('zen/tabs', 'zen/notification', 'zen/modal', 'zen/editor/base',
|
55
|
-
'zen/editor/drivers/html', 'zen/editor/drivers/textile', 'zen/editor/drivers/markdown',
|
56
|
-
'zen/init'
|
57
|
-
)
|
58
|
-
|
35
|
+
|
59
36
|
# Only allow users to access admin/users/login when they aren't logged in
|
60
37
|
if request.env['SCRIPT_NAME'] != 'admin/users/' and request.env['PATH_INFO'] != '/login'
|
61
38
|
redirect '/admin/users/login' unless logged_in?
|
62
39
|
end
|
63
40
|
|
64
|
-
# Hash containing all available formats for input fields
|
65
|
-
@format_hash = {
|
66
|
-
'html' => lang('zen_general.special.format_hash.html'),
|
67
|
-
'textile' => lang('zen_general.special.format_hash.textile'),
|
68
|
-
'markdown' => lang('zen_general.special.format_hash.markdown'),
|
69
|
-
'plain' => lang('zen_general.special.format_hash.plain')
|
70
|
-
}
|
71
|
-
|
72
41
|
@boolean_hash = {
|
73
42
|
true => lang('zen_general.special.boolean_hash.true'),
|
74
43
|
false => lang('zen_general.special.boolean_hash.false')
|
75
44
|
}.invert
|
45
|
+
end
|
46
|
+
|
47
|
+
##
|
48
|
+
# Shortcut for Zen::Asset.stylesheet.
|
49
|
+
#
|
50
|
+
# @author Yorick Peterse
|
51
|
+
# @see Zen::Asset.stylesheet
|
52
|
+
# @since 0.2.5
|
53
|
+
#
|
54
|
+
def self.stylesheet(files, options = {})
|
55
|
+
options = {
|
56
|
+
:controller => self
|
57
|
+
}.merge(options)
|
76
58
|
|
59
|
+
::Zen::Asset.stylesheet(files, options)
|
77
60
|
end
|
61
|
+
|
62
|
+
##
|
63
|
+
# Shortcut for Zen::Asset.javascript.
|
64
|
+
#
|
65
|
+
# @author Yorick Peterse
|
66
|
+
# @see Zen::Asset.javascript
|
67
|
+
# @since 0.2.5
|
68
|
+
#
|
69
|
+
def self.javascript(files, options = {})
|
70
|
+
options = {
|
71
|
+
:controller => self
|
72
|
+
}.merge(options)
|
73
|
+
|
74
|
+
::Zen::Asset.javascript(files, options)
|
75
|
+
end
|
76
|
+
|
77
|
+
# Load all stylesheets globally
|
78
|
+
stylesheet(
|
79
|
+
[
|
80
|
+
'reset', 'grid', 'layout', 'general', 'forms', 'tables', 'buttons',
|
81
|
+
'notifications'
|
82
|
+
],
|
83
|
+
:global => true
|
84
|
+
)
|
85
|
+
|
86
|
+
# Load all global javascript files
|
87
|
+
javascript(
|
88
|
+
[
|
89
|
+
'mootools/core', 'mootools/more', 'vendor/yepnope', 'zen/notification',
|
90
|
+
'zen/init',
|
91
|
+
],
|
92
|
+
:global => true
|
93
|
+
)
|
94
|
+
|
78
95
|
end
|
79
96
|
end
|
80
97
|
end
|
@@ -1,7 +1,7 @@
|
|
1
1
|
#:nodoc:
|
2
2
|
module Zen
|
3
3
|
#:nodoc:
|
4
|
-
module
|
4
|
+
module Controller
|
5
5
|
##
|
6
6
|
# The BaseController is extended by both the FrontendController and the
|
7
7
|
# BackendController. This controller is mostly used to set and retrieve data that's
|
@@ -24,15 +24,20 @@ module Zen
|
|
24
24
|
#
|
25
25
|
def initialize
|
26
26
|
super
|
27
|
-
|
28
|
-
#
|
29
|
-
if
|
30
|
-
|
27
|
+
|
28
|
+
# Store the settings data if this is the first time we're loading the controller
|
29
|
+
if ::Zen::Settings.empty?
|
30
|
+
::Settings::Model::Setting.get_settings.each do |k, v|
|
31
|
+
::Zen::Settings[k] = v
|
32
|
+
end
|
31
33
|
end
|
32
|
-
|
34
|
+
|
33
35
|
# Override the language
|
34
|
-
::Zen::Language.options.language
|
35
|
-
|
36
|
+
if ::Zen::Settings[:language] != ::Zen::Language.options.language
|
37
|
+
# Reload the language pack
|
38
|
+
::Zen::Language.options.language = ::Zen::Settings[:language]
|
39
|
+
::Zen::Language.load('zen_general')
|
40
|
+
end
|
36
41
|
end
|
37
42
|
end
|
38
43
|
end
|