zafu 0.7.7 → 0.7.8
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/History.txt +9 -1
- data/lib/zafu/info.rb +1 -1
- data/lib/zafu/markup.rb +4 -1
- data/lib/zafu/parser.rb +6 -7
- data/lib/zafu/parsing_rules.rb +26 -1
- data/lib/zafu/process/ajax.rb +39 -17
- data/lib/zafu/process/conditional.rb +0 -1
- data/lib/zafu/process/forms.rb +6 -3
- data/lib/zafu/process/html.rb +3 -1
- data/lib/zafu/process/ruby_less_processing.rb +5 -3
- data/test/zafu/meta.yml +2 -1
- data/zafu.gemspec +2 -2
- metadata +4 -4
data/History.txt
CHANGED
@@ -1,4 +1,12 @@
|
|
1
|
-
== 0.7.
|
1
|
+
== 0.7.8 2011-05-10
|
2
|
+
|
3
|
+
* Enhancements
|
4
|
+
* Added 'to_s' method to ease debugging.
|
5
|
+
* Added support for an array of keys in "ancestor".
|
6
|
+
* Added 'on' option to form (ajax actions).
|
7
|
+
* Should steal 'title' attribute on 'a' Markup.
|
8
|
+
|
9
|
+
== 0.7.7 2011-04-14
|
2
10
|
|
3
11
|
* Enhancements
|
4
12
|
* Added to_s for Markup.
|
data/lib/zafu/info.rb
CHANGED
data/lib/zafu/markup.rb
CHANGED
@@ -7,6 +7,7 @@ module Zafu
|
|
7
7
|
EMPTY_TAGS = %w{meta input link img}
|
8
8
|
STEAL_PARAMS = {
|
9
9
|
'link' => [:href, :charset, :rel, :type, :media, :rev, :target],
|
10
|
+
'a' => [:title, :onclick],
|
10
11
|
'script' => [:type, :charset, :defer],
|
11
12
|
:other => [:class, :id, :style],
|
12
13
|
}
|
@@ -23,6 +24,8 @@ module Zafu
|
|
23
24
|
attr_accessor :space_before
|
24
25
|
# Space to insert after tag
|
25
26
|
attr_accessor :space_after
|
27
|
+
# Keys to remove from zafu and use for the tag itself
|
28
|
+
attr_writer :steal_keys
|
26
29
|
|
27
30
|
class << self
|
28
31
|
|
@@ -250,7 +253,7 @@ module Zafu
|
|
250
253
|
end
|
251
254
|
|
252
255
|
def steal_keys
|
253
|
-
(STEAL_PARAMS[@tag] || []) + STEAL_PARAMS[:other]
|
256
|
+
@steal_keys || (STEAL_PARAMS[@tag] || []) + STEAL_PARAMS[:other]
|
254
257
|
end
|
255
258
|
|
256
259
|
private
|
data/lib/zafu/parser.rb
CHANGED
@@ -427,16 +427,15 @@ module Zafu
|
|
427
427
|
|
428
428
|
alias public_descendants all_descendants
|
429
429
|
|
430
|
-
# Return the last defined parent for the given
|
431
|
-
def ancestor(
|
432
|
-
|
430
|
+
# Return the last defined parent for the given keys.
|
431
|
+
def ancestor(keys)
|
432
|
+
keys = Array(keys)
|
433
433
|
ancestors.reverse_each do |a|
|
434
|
-
if
|
435
|
-
|
436
|
-
break
|
434
|
+
if keys.include?(a.method)
|
435
|
+
return a
|
437
436
|
end
|
438
437
|
end
|
439
|
-
|
438
|
+
nil
|
440
439
|
end
|
441
440
|
|
442
441
|
# Return the last defined descendant for the given key.
|
data/lib/zafu/parsing_rules.rb
CHANGED
@@ -71,7 +71,7 @@ module Zafu
|
|
71
71
|
@params = Markup.parse_params(@params)
|
72
72
|
end
|
73
73
|
|
74
|
-
# set name used for include/replace from html_tag if not
|
74
|
+
# set name used for include/replace from html_tag if not already set by superclass
|
75
75
|
@name = extract_name
|
76
76
|
|
77
77
|
if !@markup.tag && (@markup.tag = @params.delete(:tag))
|
@@ -88,6 +88,11 @@ module Zafu
|
|
88
88
|
end
|
89
89
|
end
|
90
90
|
|
91
|
+
# Used to debug parser.
|
92
|
+
def to_s
|
93
|
+
"[#{@method}#{@name.blank? ? '' : " '#{@name}'"}#{@params.empty? ? '' : " #{@params.map{|k,v| ":#{k}=>#{v.inspect}"}.join(', ')}"}]" + (@blocks||[]).join('') + "[/#{@method}]"
|
94
|
+
end
|
95
|
+
|
91
96
|
def extract_name
|
92
97
|
super ||
|
93
98
|
(%w{input select textarea}.include?(@method) ? nil : @params[:name]) ||
|
@@ -291,5 +296,25 @@ module Zafu
|
|
291
296
|
flush
|
292
297
|
end
|
293
298
|
end
|
299
|
+
|
300
|
+
# Helper during compilation to make a block
|
301
|
+
def add_block(text_or_opts, at_start = false)
|
302
|
+
# avoid wrapping objects in [void][/void]
|
303
|
+
bak = @blocks
|
304
|
+
@blocks = []
|
305
|
+
if text_or_opts.kind_of?(String)
|
306
|
+
new_blocks = make(:void, :method => 'void', :text => text_or_opts).blocks
|
307
|
+
else
|
308
|
+
new_blocks = [make(:void, text_or_opts)]
|
309
|
+
end
|
310
|
+
if at_start
|
311
|
+
bak = new_blocks + bak
|
312
|
+
else
|
313
|
+
bak += new_blocks
|
314
|
+
end
|
315
|
+
@blocks = bak
|
316
|
+
# Force descendants rebuild
|
317
|
+
@all_descendants = nil
|
318
|
+
end
|
294
319
|
end # ParsingRules
|
295
320
|
end # Zafu
|
data/lib/zafu/process/ajax.rb
CHANGED
@@ -41,6 +41,8 @@ module Zafu
|
|
41
41
|
open_node_context(finder, :node => self.node.move_to(var, finder[:class])) do
|
42
42
|
# Pagination count and other contextual variables exist here.
|
43
43
|
|
44
|
+
# TODO: DRY with r_block...
|
45
|
+
|
44
46
|
# INLINE ==========
|
45
47
|
out wrap(
|
46
48
|
expand_with(
|
@@ -134,9 +136,26 @@ module Zafu
|
|
134
136
|
else
|
135
137
|
# 1. store template
|
136
138
|
# will wrap with @markup
|
137
|
-
store_block(self)
|
139
|
+
store_block(self, :ajax_action => 'show')
|
140
|
+
|
141
|
+
if edit_block = descendant('edit')
|
142
|
+
form_block = descendant('form') || self
|
143
|
+
|
144
|
+
publish_after_save = form_block.params[:publish] ||
|
145
|
+
(edit_block && edit_block.params[:publish])
|
146
|
+
|
147
|
+
# 2. store form
|
148
|
+
cont = {
|
149
|
+
:saved_template => form_url(node.dom_prefix),
|
150
|
+
:make_form => self == form_block,
|
151
|
+
:publish_after_save => publish_after_save,
|
152
|
+
:ajax_action => 'edit',
|
153
|
+
}
|
138
154
|
|
139
|
-
|
155
|
+
store_block(form_block, cont)
|
156
|
+
end
|
157
|
+
|
158
|
+
# 3. render
|
140
159
|
# Set id with the current node context (<%= var1.zip %>).
|
141
160
|
@markup.set_id(node.dom_id(:list => false))
|
142
161
|
out expand_with
|
@@ -146,29 +165,28 @@ module Zafu
|
|
146
165
|
|
147
166
|
def r_edit
|
148
167
|
# ajax
|
149
|
-
if @context[:form_cancel]
|
168
|
+
if cancel = @context[:form_cancel]
|
150
169
|
# cancel button
|
151
|
-
|
170
|
+
out cancel
|
152
171
|
else
|
153
172
|
# edit button
|
154
173
|
|
155
174
|
# TODO: show 'reply' instead of 'edit' in comments if visitor != author
|
156
|
-
|
175
|
+
block = ancestor(%w{each block})
|
176
|
+
|
177
|
+
# 'publish' is detected by r_block and set in form.
|
178
|
+
# removed so it does not polute link
|
179
|
+
@params.delete('publish')
|
180
|
+
@params.delete('cancel')
|
157
181
|
|
158
|
-
link = wrap(make_link(:default_text => _('edit'), :update =>
|
182
|
+
link = wrap(make_link(:default_text => _('edit'), :update => block, :action => 'edit'))
|
159
183
|
|
160
184
|
out "<% if #{node}.can_write? %>#{link}<% end %>"
|
161
185
|
end
|
162
|
-
|
163
|
-
#if @context[:template_url]
|
164
|
-
#else
|
165
|
-
# # FIXME: we could link to some html page to edit the item.
|
166
|
-
# ""
|
167
|
-
#end
|
168
186
|
end
|
169
187
|
|
170
188
|
def r_cancel
|
171
|
-
|
189
|
+
r_edit
|
172
190
|
end
|
173
191
|
|
174
192
|
def r_add
|
@@ -188,7 +206,7 @@ module Zafu
|
|
188
206
|
@blocks = []
|
189
207
|
add_btn = make(:void, :method => 'add_btn', :params => @params.dup, :text => '')
|
190
208
|
add_btn.blocks = blocks
|
191
|
-
|
209
|
+
@all_descendants = nil
|
192
210
|
end
|
193
211
|
|
194
212
|
if @context[:form]
|
@@ -205,10 +223,14 @@ module Zafu
|
|
205
223
|
# Expand 'add' block
|
206
224
|
out wrap("#{expand_with(:onclick=>"[\"#{node.dom_prefix}_add\", \"#{node.dom_prefix}_form\"].each(Element.toggle);#{focus}return false;")}")
|
207
225
|
|
208
|
-
|
226
|
+
if klass = @context[:klass]
|
227
|
+
return parser_error("Invalid class '#{klass}'") unless klass = get_class(klass)
|
228
|
+
else
|
229
|
+
klass = Array(node.klass).first
|
230
|
+
end
|
209
231
|
|
210
|
-
#
|
211
|
-
new_node = node.move_to("#{var}_new",
|
232
|
+
# New object to render form.
|
233
|
+
new_node = node.move_to("#{var}_new", klass, :new_record => true)
|
212
234
|
|
213
235
|
if new_node.will_be?(Node)
|
214
236
|
# FIXME: BUG if we set <r:form klass='Post'/> the user cannot select class with menu...
|
data/lib/zafu/process/forms.rb
CHANGED
@@ -6,6 +6,10 @@ module Zafu
|
|
6
6
|
end
|
7
7
|
|
8
8
|
def r_form
|
9
|
+
unless @params[:on].nil? || @params[:on].split(',').include?(@context[:ajax_action])
|
10
|
+
return ''
|
11
|
+
end
|
12
|
+
|
9
13
|
options = form_options
|
10
14
|
|
11
15
|
@markup.set_id(options[:id]) if options[:id]
|
@@ -59,7 +63,7 @@ module Zafu
|
|
59
63
|
def make_form
|
60
64
|
return nil unless @context[:make_form]
|
61
65
|
|
62
|
-
if method == 'each'
|
66
|
+
if method == 'each' || method == 'block'
|
63
67
|
r_form
|
64
68
|
else
|
65
69
|
nil
|
@@ -101,9 +105,8 @@ module Zafu
|
|
101
105
|
# Render the 'form' tag and set expansion context.
|
102
106
|
def form_tag(options)
|
103
107
|
opts = options.dup
|
104
|
-
form = @context[:form]
|
105
108
|
|
106
|
-
if
|
109
|
+
if descendant('cancel') || descendant('edit')
|
107
110
|
# Pass 'form_cancel' content to expand_with (already in options).
|
108
111
|
else
|
109
112
|
# Insert cancel before form
|
data/lib/zafu/process/html.rb
CHANGED
@@ -84,7 +84,9 @@ module Zafu
|
|
84
84
|
case @markup.tag
|
85
85
|
when 'link'
|
86
86
|
key = :href
|
87
|
-
|
87
|
+
return parser_error("Missing 'rel' parameter.") unless rel = @params[:rel]
|
88
|
+
return parser_error("Missing 'href' parameter.") unless @params[:href]
|
89
|
+
if rel.downcase == 'stylesheet'
|
88
90
|
type = :stylesheet
|
89
91
|
else
|
90
92
|
type = :link
|
@@ -21,7 +21,6 @@ module Zafu
|
|
21
21
|
# searches inside a 'helpers' module and finally looks into the current node_context.
|
22
22
|
# If nothing is found at this stage, we prepend the method with the current node and start over again.
|
23
23
|
def safe_method_type(signature, receiver = nil)
|
24
|
-
#puts [node.name, node.klass, signature].inspect
|
25
24
|
super || get_method_type(signature, false)
|
26
25
|
end
|
27
26
|
|
@@ -94,13 +93,15 @@ module Zafu
|
|
94
93
|
end
|
95
94
|
|
96
95
|
def get_attribute_or_eval(use_string_block = true)
|
97
|
-
if
|
96
|
+
if @params[:date] && method != 'link'
|
98
97
|
return parser_continue("'date' parameter is deprecated. Please use 'attr' or 'eval'.")
|
99
98
|
elsif attribute = @params[:attr]
|
100
99
|
code = "this.#{attribute}"
|
101
100
|
elsif code = @params[:eval] || @params[:test]
|
102
101
|
elsif text = @params[:text]
|
103
102
|
code = "%Q{#{text}}"
|
103
|
+
elsif text = @params[:t]
|
104
|
+
code = "t(%Q{#{text}})"
|
104
105
|
elsif use_string_block && @blocks.size == 1 && @blocks.first.kind_of?(String)
|
105
106
|
return RubyLess::TypedString.new(@blocks.first.inspect, :class => String, :literal => @blocks.first)
|
106
107
|
else
|
@@ -273,7 +274,8 @@ module Zafu
|
|
273
274
|
ivar = signature.first
|
274
275
|
if ivar == 'this'
|
275
276
|
if node.list_context?
|
276
|
-
|
277
|
+
# Return first element
|
278
|
+
node.opts.merge(:class => node.klass.first, :method => "#{node}.first")
|
277
279
|
else
|
278
280
|
node.opts.merge(:class => node.klass, :method => node.name)
|
279
281
|
end
|
data/test/zafu/meta.yml
CHANGED
@@ -4,7 +4,8 @@ some_template:
|
|
4
4
|
|
5
5
|
include_with_part:
|
6
6
|
# part 'a' is moved around
|
7
|
-
|
7
|
+
# and we overwrite 'link' method with 'void'
|
8
|
+
src: "<r:include template='/some/template'><r:with part='a'/><r:with part='b' do='void'>new b:<r:include template='/some/template' part='a'/></r:with></r:include>"
|
8
9
|
tem: "<div id='b'>new b:<div id='a'>a</div></div>"
|
9
10
|
|
10
11
|
include_with_part_change_class:
|
data/zafu.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{zafu}
|
8
|
-
s.version = "0.7.
|
8
|
+
s.version = "0.7.8"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Gaspard Bucher"]
|
12
|
-
s.date = %q{2011-
|
12
|
+
s.date = %q{2011-05-10}
|
13
13
|
s.description = %q{Provides a powerful templating language based on xhtml for rails}
|
14
14
|
s.email = %q{gaspard@teti.ch}
|
15
15
|
s.extra_rdoc_files = [
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: zafu
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 19
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 7
|
9
|
-
-
|
10
|
-
version: 0.7.
|
9
|
+
- 8
|
10
|
+
version: 0.7.8
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Gaspard Bucher
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2011-
|
18
|
+
date: 2011-05-10 00:00:00 +02:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|