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/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
|