zafu 0.8.2 → 0.8.3

Sign up to get free protection for your applications and to get access to all the features.
data/History.txt CHANGED
@@ -1,3 +1,8 @@
1
+ == 0.8.3 2011-07-12
2
+
3
+ * Enhancements
4
+ * Better handling of DOM scoped ids in saved templates
5
+
1
6
  == 0.8.2 2011-07-11
2
7
 
3
8
  * Enhancements
data/lib/zafu/info.rb CHANGED
@@ -1,4 +1,4 @@
1
1
  module Zafu
2
- VERSION = '0.8.2'
2
+ VERSION = '0.8.3'
3
3
  end
4
4
 
@@ -51,7 +51,7 @@ module Zafu
51
51
  # ivar name (see #master_class).
52
52
  def as_main(after_class = nil)
53
53
  klass = after_class ? master_class(after_class) : single_class
54
- res = self.class.new("@#{klass.to_s.underscore}", single_class, nil) #, :new_record => @opts[:new_record])
54
+ res = self.class.new("@#{klass.to_s.underscore}", single_class, nil)
55
55
  res.dom_prefix = self.dom_prefix
56
56
  res
57
57
  end
@@ -94,11 +94,14 @@ module Zafu
94
94
  str || "<%= #{code} %>"
95
95
  end
96
96
  else
97
- @saved_dom_id || (
98
- [dom_prefix] +
99
- dom_scopes +
100
- (options[:list] ? [make_scope_id] : [])
101
- ).compact.uniq.join('_')
97
+ @saved_dom_id || if options[:list]
98
+ scopes = dom_scopes
99
+ scopes = [dom_prefix] if scopes.empty?
100
+ scopes + [make_scope_id]
101
+ else
102
+ scopes = dom_scopes
103
+ scopes + ((@up || scopes.empty?) ? [dom_prefix] : [])
104
+ end.compact.uniq.join('_')
102
105
  end
103
106
  end
104
107
 
@@ -173,7 +176,17 @@ module Zafu
173
176
  protected
174
177
  # List of scopes defined in ancestry (used to generate dom_id).
175
178
  def dom_scopes
176
- (@up ? @up.dom_scopes : []) + (@dom_scope ? [make_scope_id] : [])
179
+ return [@saved_dom_id] if @saved_dom_id
180
+ if @up
181
+ scopes = @up.dom_scopes
182
+ if @dom_scope
183
+ (scopes.empty? ? [dom_prefix] : scopes) + [make_scope_id]
184
+ else
185
+ scopes
186
+ end
187
+ else
188
+ @dom_scope ? [dom_prefix, make_scope_id] : []
189
+ end
177
190
  end
178
191
 
179
192
  private
@@ -36,20 +36,25 @@ module Zafu
36
36
  end
37
37
 
38
38
  if need_ajax?(each_block)
39
+ #node.dom_prefix = dom_name
39
40
  # We need to build the templates for ajax rendering.
41
+ # HACK to avoid changing dom_prefix in drag&drop
42
+
43
+ # The bug with wrong prefix between drop inline and ajax result comes from
44
+ # here (see selenium test drop1 and drop2).
45
+ node.dom_prefix = dom_name
40
46
 
41
47
  # 1. Render inline
42
48
  # assign [] to var
43
49
  out "<% if (#{var} = #{finder[:method]}) || (#{node}.#{finder[:class].first <= Comment ? "can_comment?" : "can_write?"} && #{var}=[]) %>"
44
50
  # The list is not empty or we have enough rights to add new elements.
45
51
 
46
- node.dom_prefix = dom_name
47
-
48
52
  # New node context.
49
53
  open_node_context(finder, :node => self.node.move_to(var, finder[:class])) do
50
54
  # Pagination count and other contextual variables exist here.
51
55
 
52
- # TODO: DRY with r_block...
56
+ tmplt_node = self.node.move_to(var, finder[:class])
57
+ tmplt_node.dom_prefix = node.dom_prefix
53
58
 
54
59
  # INLINE ==========
55
60
  out wrap(
@@ -72,11 +77,11 @@ module Zafu
72
77
  )
73
78
 
74
79
  # 2. Save 'each' template
75
- store_block(each_block, :node => self.node.move_to(var, finder[:class])) #, :klass => klass) # do we need klass here ?
80
+ store_block(each_block, :node => tmplt_node)
76
81
 
77
82
  # 3. Save 'form' template
78
83
  cont = {
79
- :saved_template => form_url(node.dom_prefix),
84
+ :saved_template => form_url(tmplt_node.dom_prefix),
80
85
  :klass => klass,
81
86
  :make_form => each_block == form_block,
82
87
  # Used to get parameters like 'publish', 'done', 'after'
@@ -238,8 +243,7 @@ module Zafu
238
243
  klass = @context[:klass] || node.single_class
239
244
 
240
245
  # New object to render form.
241
- new_node = node.move_to("#{var}_new", klass,
242
- :new_keys => {})
246
+ new_node = node.move_to("#{var}_new", klass, :new_keys => {})
243
247
 
244
248
 
245
249
  if new_node.will_be?(Node)
@@ -313,6 +317,7 @@ module Zafu
313
317
  if @context[:saved_template]
314
318
  # render to start a saved template
315
319
  node.saved_dom_id = "\#{ndom_id(#{node})}"
320
+ node.dom_prefix ||= dom_name
316
321
  node.propagate_dom_scope!
317
322
  @markup.set_id(node.dom_id)
318
323
 
@@ -346,7 +351,7 @@ module Zafu
346
351
 
347
352
  # Return true if we need to insert the dom id for this element.
348
353
  def need_dom_id?
349
- @context[:form] || descendant('unlink') || descendant('drop')
354
+ @context[:form] || child['unlink'] || (single_child_method && single_child_method == child['drop'])
350
355
  end
351
356
 
352
357
  # Unique template_url, ending with dom_id
@@ -362,7 +367,7 @@ module Zafu
362
367
  # Context is passed when the parent needs to set dom_name on a child
363
368
  # before @context is passed down.
364
369
  def dom_name(context = @context)
365
- @name ||= unique_name(context)
370
+ @dom_name ||= unique_name(context)
366
371
  end
367
372
 
368
373
  # Return a different name on each call
@@ -40,6 +40,7 @@ module Zafu
40
40
  if node.list_context?
41
41
  # we are still in a list (example: previous context was [[Node]], current is [Node])
42
42
  else
43
+ node.dom_prefix ||= dom_name
43
44
  node.propagate_dom_scope!
44
45
 
45
46
  if need_dom_id?
@@ -41,7 +41,7 @@ module Zafu
41
41
  if v.kind_of?(String)
42
42
  v = "'#{v}'" unless v.kind_of?(String) && ['"', "'"].include?(v[0..0])
43
43
  out "<input type='hidden' name='#{k}' value=#{v}/>"
44
- else
44
+ elsif v.kind_of?(Array)
45
45
  # We use ['ffff'] to indicate that the content is already escaped and ready for ERB.
46
46
  out v.first
47
47
  end
@@ -261,22 +261,30 @@ class NodeContextTest < Test::Unit::TestCase
261
261
  context 'Generating a dom id' do
262
262
  context 'in a blank context' do
263
263
  subject do
264
- NodeContext.new('@foo', Page)
264
+ n = NodeContext.new('@foo', Page)
265
+ n.dom_prefix = 'list1'
266
+ n
265
267
  end
266
268
 
267
269
  should 'return the node name in DOM id' do
268
- assert_equal '<%= @foo.zip %>', subject.dom_id
270
+ assert_equal '<%= %Q{list1_#{@foo.zip}} %>', subject.dom_id
271
+ end
272
+
273
+ should 'not use zip on list false' do
274
+ assert_equal 'list1', subject.dom_id(:list => false)
269
275
  end
270
276
 
271
277
  should 'scope without erb on erb false' do
272
- assert_equal '#{@foo.zip}', subject.dom_id(:erb => false)
278
+ assert_equal 'list1_#{@foo.zip}', subject.dom_id(:erb => false)
273
279
  end
274
280
  end
275
281
 
276
282
  context 'in a hierarchy of contexts' do
277
283
  setup do
278
284
  @a = NodeContext.new('@node', Page)
285
+ @a.dom_prefix = 'a'
279
286
  @b = NodeContext.new('var1', [Page], @a)
287
+ @b.dom_prefix = 'b'
280
288
  @c = NodeContext.new('var2', Page, @b)
281
289
  end
282
290
 
@@ -291,7 +299,22 @@ class NodeContextTest < Test::Unit::TestCase
291
299
  end
292
300
 
293
301
  should 'use dom_scopes' do
294
- assert_equal '<%= %Q{#{var1.zip}_#{var2.zip}_#{var3.zip}} %>', subject.dom_id
302
+ assert_equal '<%= %Q{b_#{var1.zip}_#{var2.zip}_#{var3.zip}} %>', subject.dom_id
303
+ end
304
+
305
+ should 'use dom_scopes and dom_prefix not in list' do
306
+ subject.dom_prefix = 'd'
307
+ assert_equal '<%= %Q{b_#{var1.zip}_#{var2.zip}_d} %>', subject.dom_id(:list => false)
308
+ end
309
+
310
+ context 'with a saved dom_id' do
311
+ setup do
312
+ @c.saved_dom_id = '#{ndom_id(@foo)}'
313
+ end
314
+
315
+ should 'use saved id in scope' do
316
+ assert_equal '<%= %Q{#{ndom_id(@foo)}_#{var3.zip}} %>', subject.dom_id
317
+ end
295
318
  end
296
319
  end
297
320
 
@@ -302,7 +325,7 @@ class NodeContextTest < Test::Unit::TestCase
302
325
  end
303
326
 
304
327
  should 'not use self twice' do
305
- assert_equal '<%= %Q{#{@node.zip}_#{var3.zip}} %>', subject.dom_id
328
+ assert_equal '<%= %Q{a_#{@node.zip}_#{var3.zip}} %>', subject.dom_id
306
329
  end
307
330
  end
308
331
 
@@ -312,6 +335,7 @@ class NodeContextTest < Test::Unit::TestCase
312
335
  end
313
336
 
314
337
  should 'use dom_prefix' do
338
+ subject.dom_prefix = nil
315
339
  assert_equal '<%= %Q{cart_#{var3.zip}} %>', subject.dom_id
316
340
  end
317
341
  end
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.8.2"
8
+ s.version = "0.8.3"
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-07-11}
12
+ s.date = %q{2011-07-12}
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: 59
4
+ hash: 57
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 8
9
- - 2
10
- version: 0.8.2
9
+ - 3
10
+ version: 0.8.3
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-07-11 00:00:00 +02:00
18
+ date: 2011-07-12 00:00:00 +02:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency