fabulator 0.0.11 → 0.0.12
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 -0
- data/VERSION +1 -1
- data/lib/fabulator/core/actions/for_each.rb +26 -8
- data/lib/fabulator/expr/parser.rb +1 -1
- data/lib/fabulator/lib.rb +1 -0
- data/lib/fabulator/lib/function.rb +76 -0
- data/lib/fabulator/lib/lib.rb +5 -0
- data/xslt/form.xsl +25 -48
- data/xsm_expression_parser.racc +1 -1
- metadata +4 -4
data/History.txt
CHANGED
@@ -1,3 +1,12 @@
|
|
1
|
+
=== 0.0.12 2010-12-03
|
2
|
+
|
3
|
+
* 1 major enhancement:
|
4
|
+
* Added <template /> element to libraries
|
5
|
+
|
6
|
+
* 2 minor enhancements:
|
7
|
+
* Fixed various XSLT issues with form markup
|
8
|
+
* Fixed scope issue that caused <for-each /> failure with @as
|
9
|
+
|
1
10
|
=== 0.0.11 2010-11-11
|
2
11
|
|
3
12
|
* 1 bug fix
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.0.
|
1
|
+
0.0.12
|
@@ -13,19 +13,37 @@ module Fabulator
|
|
13
13
|
|
14
14
|
def run(context, autovivify = false)
|
15
15
|
@context.with(context) do |ctx|
|
16
|
-
items = self.select(ctx)
|
16
|
+
items = self.select(ctx)
|
17
17
|
res = nil
|
18
18
|
ctx.in_context do |c|
|
19
19
|
if !@sorts.empty?
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
20
|
+
if self.as.nil?
|
21
|
+
items = items.sort_by{ |i|
|
22
|
+
@sorts.collect{|s| s.run(c.with_root(i)) }.join("\0")
|
23
|
+
}
|
24
|
+
else
|
25
|
+
items = items.sort_by{ |i|
|
26
|
+
r = nil
|
27
|
+
c.in_context do |cc|
|
28
|
+
cc.set_var(self.as, i)
|
29
|
+
r = @sorts.collect{|s| s.run(cc.with_root(i)) }.join("\0")
|
30
|
+
end
|
31
|
+
r
|
32
|
+
}
|
33
|
+
end
|
24
34
|
end
|
25
35
|
res = [ ]
|
26
|
-
|
27
|
-
|
28
|
-
|
36
|
+
if self.as.nil?
|
37
|
+
items.each do |i|
|
38
|
+
res = res + self.run_actions(c.with_root(i))
|
39
|
+
end
|
40
|
+
else
|
41
|
+
items.each do |i|
|
42
|
+
c.in_context do |cc|
|
43
|
+
cc.set_var(self.as, i) unless self.as.nil?
|
44
|
+
res = res + self.run_actions(cc.with_root(i))
|
45
|
+
end
|
46
|
+
end
|
29
47
|
end
|
30
48
|
end
|
31
49
|
return res
|
data/lib/fabulator/lib.rb
CHANGED
@@ -31,6 +31,82 @@ module Fabulator
|
|
31
31
|
|
32
32
|
has_actions
|
33
33
|
end
|
34
|
+
|
35
|
+
class Template < Fabulator::Structural
|
36
|
+
namespace FAB_LIB_NS
|
37
|
+
|
38
|
+
attribute :name, :static => true
|
39
|
+
|
40
|
+
def compile_xml(xml, context)
|
41
|
+
super
|
42
|
+
|
43
|
+
@actions = [ ]
|
44
|
+
@wrapper = [ ]
|
45
|
+
|
46
|
+
if !xml.nil?
|
47
|
+
ctx = nil
|
48
|
+
if xml.name == 'template' && xml.namespaces.namespace.href == FAB_LIB_NS
|
49
|
+
ctx = @context.merge(xml)
|
50
|
+
@wrapper = [ '', '' ]
|
51
|
+
else
|
52
|
+
ctx = @context.merge
|
53
|
+
# we need to set @wrapper to [ begin, end ]
|
54
|
+
s = ""
|
55
|
+
if (xml.namespaces.namespace.prefix rescue nil)
|
56
|
+
s += xml.namespaces.namespace.prefix + ":"
|
57
|
+
end
|
58
|
+
s += xml.name
|
59
|
+
e = "</" + s + ">"
|
60
|
+
s = "<" + s
|
61
|
+
xml.each_attr do |attr|
|
62
|
+
s += " "
|
63
|
+
if attr.ns?
|
64
|
+
s += attr.ns.prefix + ":"
|
65
|
+
end
|
66
|
+
s += attr.name + "="
|
67
|
+
if attr.value =~ /"/
|
68
|
+
s += "'" + attr.value.gsub(/&/, '&').gsub(/</, '<').gsub(/'/, '"') + "'"
|
69
|
+
else
|
70
|
+
s += '"' + attr.value.gsub(/&/, '&').gsub(/</, '<') + '"'
|
71
|
+
end
|
72
|
+
end
|
73
|
+
s += ">"
|
74
|
+
@wrapper = [ s, e ]
|
75
|
+
end
|
76
|
+
xml.each_child do |node|
|
77
|
+
if node.element?
|
78
|
+
if ctx.action_exists?((node.namespaces.namespace.href rescue nil), node.name)
|
79
|
+
@actions << ctx.compile_action(node)
|
80
|
+
else
|
81
|
+
a = self.class.new
|
82
|
+
a.compile_xml(node, ctx)
|
83
|
+
@actions << a
|
84
|
+
end
|
85
|
+
elsif node.text? || node.cdata?
|
86
|
+
@actions << node.content
|
87
|
+
end
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
91
|
+
self
|
92
|
+
end
|
93
|
+
|
94
|
+
def run(context, autovivify = false)
|
95
|
+
s = ''
|
96
|
+
@context.with(context) do |ctx|
|
97
|
+
@actions.each do |action|
|
98
|
+
if action.is_a?(String)
|
99
|
+
s += action
|
100
|
+
else
|
101
|
+
r = action.run(ctx, autovivify)
|
102
|
+
s += r.collect { |v| v.to([FAB_NS, 'string'], ctx).value }.join('')
|
103
|
+
end
|
104
|
+
end
|
105
|
+
end
|
106
|
+
s = @wrapper.first + s + @wrapper.last
|
107
|
+
return [ context.root.anon_node(s, [ FAB_NS, 'string' ]) ]
|
108
|
+
end
|
109
|
+
end
|
34
110
|
end
|
35
111
|
end
|
36
112
|
|
data/lib/fabulator/lib/lib.rb
CHANGED
@@ -14,6 +14,7 @@ module Fabulator
|
|
14
14
|
contains :mapping, :storage => :hash, :key => :name, :delayable => true
|
15
15
|
contains :reduction, :storage => :hash, :key => :name, :delayable => true
|
16
16
|
contains :consolidation, :storage => :hash, :key => :name, :delayable => true
|
17
|
+
contains :template, :storage => :hash, :key => :name, :delayable => true
|
17
18
|
contains :type, :storage => :hash, :key => :name, :delayable => true
|
18
19
|
contains :filter, :storage => :hash, :key => :name, :delayable => true
|
19
20
|
contains :constraint, :storage => :hash, :key => :name, :delayable => true
|
@@ -73,6 +74,10 @@ module Fabulator
|
|
73
74
|
fctn = @reductions[nom]
|
74
75
|
fctn_type = :reduction
|
75
76
|
end
|
77
|
+
if fctn.nil?
|
78
|
+
fctn = @templates[nom]
|
79
|
+
fctn_type = :function
|
80
|
+
end
|
76
81
|
end
|
77
82
|
|
78
83
|
if !fctn.nil?
|
data/xslt/form.xsl
CHANGED
@@ -51,7 +51,7 @@
|
|
51
51
|
<xsl:param name="form_level" />
|
52
52
|
<xsl:choose>
|
53
53
|
<xsl:when test="f:caption">
|
54
|
-
<tr><td colspan="2">
|
54
|
+
<tr><td colspan="2" class="form-subform">
|
55
55
|
<fieldset>
|
56
56
|
<legend><xsl:apply-templates select="f:caption" /></legend>
|
57
57
|
<xsl:call-template name="form-content">
|
@@ -71,9 +71,8 @@
|
|
71
71
|
</xsl:template>
|
72
72
|
|
73
73
|
<xsl:template match="f:text">
|
74
|
-
<tr><
|
75
|
-
|
76
|
-
</td><td class="form-element" valign="top">
|
74
|
+
<tr><xsl:call-template name="form-caption" />
|
75
|
+
<td class="form-element" valign="top">
|
77
76
|
<xsl:choose>
|
78
77
|
<xsl:when test="@f:rows > 1 or @rows > 1">
|
79
78
|
<textarea>
|
@@ -114,9 +113,8 @@
|
|
114
113
|
</xsl:template>
|
115
114
|
|
116
115
|
<xsl:template match="f:password">
|
117
|
-
<tr><
|
118
|
-
|
119
|
-
</td><td class="form-element" valign="top">
|
116
|
+
<tr><xsl:call-template name="form-caption" />
|
117
|
+
<td class="form-element" valign="top">
|
120
118
|
<input>
|
121
119
|
<xsl:attribute name="type">password</xsl:attribute>
|
122
120
|
<xsl:attribute name="name"><xsl:apply-templates select="." mode="id" /></xsl:attribute>
|
@@ -125,8 +123,8 @@
|
|
125
123
|
</xsl:template>
|
126
124
|
|
127
125
|
<xsl:template match="f:asset">
|
128
|
-
<
|
129
|
-
|
126
|
+
<tr><xsl:call-template name="form-caption" />
|
127
|
+
<td class="form-element" valign="top">
|
130
128
|
<span class="form-fluid-asset"></span>
|
131
129
|
<input>
|
132
130
|
<xsl:attribute name="class">form-asset</xsl:attribute>
|
@@ -136,56 +134,28 @@
|
|
136
134
|
<xsl:attribute name="accept"><xsl:value-of select="@f:accept" /></xsl:attribute>
|
137
135
|
</xsl:if>
|
138
136
|
</input>
|
139
|
-
</
|
137
|
+
</td></tr>
|
140
138
|
</xsl:template>
|
141
139
|
|
142
140
|
<xsl:template match="f:selection">
|
143
141
|
<!-- for now, just handle simple selections -->
|
144
142
|
<xsl:param name="form_level"/>
|
145
|
-
<xsl:
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
<!-- xsl:with-param name="form_id"><xsl:value-of select="$form_id"/></xsl:with-param -->
|
152
|
-
<xsl:with-param name="form_level"><xsl:value-of select="$form_level"/></xsl:with-param>
|
153
|
-
</xsl:call-template>
|
154
|
-
</span>
|
155
|
-
</xsl:when>
|
156
|
-
<xsl:when test="./f:option//f:help|./f:option//f:form">
|
157
|
-
<span class="form-element">
|
158
|
-
<xsl:apply-templates select="f:caption"/>
|
159
|
-
<xsl:apply-templates select="f:help"/>
|
160
|
-
<xsl:call-template name="field-selection">
|
161
|
-
<!-- xsl:with-param name="form_id"><xsl:value-of select="$form_id"/></xsl:with-param -->
|
162
|
-
<xsl:with-param name="form_level"><xsl:value-of select="$form_level" /></xsl:with-param>
|
163
|
-
</xsl:call-template>
|
164
|
-
</span>
|
165
|
-
</xsl:when>
|
166
|
-
<xsl:otherwise>
|
167
|
-
<span class="form-element">
|
168
|
-
<!-- label class="form-element-label">
|
169
|
-
<xsl:attribute name="for">
|
170
|
-
<xsl:apply-templates select="." mode="id"/>
|
171
|
-
</xsl:attribute -->
|
172
|
-
<xsl:apply-templates select="f:caption"/>
|
173
|
-
<xsl:apply-templates select="f:help"/>
|
174
|
-
<!-- /label -->
|
175
|
-
<xsl:call-template name="field-selection">
|
176
|
-
<xsl:with-param name="form_level"><xsl:value-of select="$form_level" /></xsl:with-param>
|
177
|
-
</xsl:call-template>
|
178
|
-
</span>
|
179
|
-
</xsl:otherwise>
|
180
|
-
</xsl:choose>
|
143
|
+
<tr><xsl:call-template name="form-caption" />
|
144
|
+
<td class="form-element" valign="top">
|
145
|
+
<xsl:call-template name="field-selection">
|
146
|
+
<xsl:with-param name="form_level"><xsl:value-of select="$form_level"/></xsl:with-param>
|
147
|
+
</xsl:call-template>
|
148
|
+
</td></tr>
|
181
149
|
</xsl:template>
|
182
150
|
|
183
151
|
<xsl:template match="f:group">
|
184
|
-
|
185
|
-
|
152
|
+
<xsl:param name="form_level" />
|
153
|
+
<tr><xsl:call-template name="form-caption" />
|
154
|
+
<td class="form-element" valign="top">
|
186
155
|
<xsl:call-template name="form-content">
|
187
156
|
<xsl:with-param name="form_level"><xsl:value-of select="$form_level" /></xsl:with-param>
|
188
157
|
</xsl:call-template>
|
158
|
+
</td></tr>
|
189
159
|
</xsl:template>
|
190
160
|
|
191
161
|
<xsl:template match="f:submission">
|
@@ -468,6 +438,13 @@
|
|
468
438
|
</xsl:choose>
|
469
439
|
</xsl:template>
|
470
440
|
|
441
|
+
<xsl:template name="form-caption">
|
442
|
+
<td class="form-caption" valign="top">
|
443
|
+
<xsl:apply-templates select="f:caption" />
|
444
|
+
</td>
|
445
|
+
</xsl:template>
|
446
|
+
|
447
|
+
|
471
448
|
|
472
449
|
<xsl:template match="*" mode="id">
|
473
450
|
<xsl:for-each select="ancestor::*[@id != '']">
|
data/xsm_expression_parser.racc
CHANGED
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fabulator
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 7
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 0
|
9
|
-
-
|
10
|
-
version: 0.0.
|
9
|
+
- 12
|
10
|
+
version: 0.0.12
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- James Smith
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2010-
|
18
|
+
date: 2010-12-03 00:00:00 +00:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|